public function process(&$backtrace = array())
    {
        if (empty($backtrace) === true) {
            $backtrace = $this->getBacktrace();
        }

        $output = '';
        $maxStep = (int) $this->pool->config->getSetting(Fallback::SETTING_MAX_STEP_NUMBER);
        $stepCount = count($backtrace);

        // Remove steps according to the configuration.
        if ($maxStep < $stepCount) {
            $this->pool->messages->addMessage('omittedBacktrace', array(($maxStep + 1), $stepCount));
        } else {
            // We will not analyse more steps than we actually have.
            $maxStep = $stepCount;
        }

        for ($step = 1; $step <= $maxStep; ++$step) {
            $output .= $this->pool->render->renderExpandableChild(
                $this->pool->createClass('Brainworxx\\Krexx\\Analyse\\Model')
                    ->setName($step)
                    ->setType(static::TYPE_STACK_FRAME)
                    ->addParameter(static::PARAM_DATA, $backtrace[$step - 1])
                    ->injectCallback(
                        $this->pool->createClass('Brainworxx\\Krexx\\Analyse\\Callback\\Analyse\\BacktraceStep')
                    )
            );
        }

        return $output;
    }