3

メソッドで例外のトレースを見ると、一貫して追加のスタック フレームを取得していますgetTraceAsString()。にも にも表示されgetTrace()ませんdebug_backtrace()。それはどこから来て、それは何を意味するのですか?

たとえば、このスクリプトは次のとおりです。

function foo () {
    echo "== debug_backtrace() ==\n";
    foreach (debug_backtrace() as $i => $frame) {
        echo "#$i $frame[file]($frame[line]): $frame[function]()\n";
    }
    throw new Exception();
}

function bar () {
    foo();
}

try {
    bar();
} catch (Exception $e) {
    echo "\n== getTrace() ==\n";
    foreach ($e->getTrace() as $i => $frame) {
        echo "#$i $frame[file]($frame[line]): $frame[function]()\n";
    }
    echo "\n== getTraceAsString() ==\n";
    echo $e->getTraceAsString(), "\n";
}

次の出力が生成されます。

== debug_backtrace() ==
#0 /home/foo/tests/php/test4.php(13): foo()
#1 /home/foo/tests/php/test4.php(17): bar()

== getTrace() ==
#0 /home/foo/tests/php/test4.php(13): foo()
#1 /home/foo/tests/php/test4.php(17): bar()

== getTraceAsString() ==
#0 /home/foo/tests/php/test4.php(13): foo()
#1 /home/foo/tests/php/test4.php(17): bar()
#2 {main}

私が {main} を見た他の唯一の場所は、Xdebug でした。内部の PHP スタック フレームだと思いますが、トレースを文字列として取得する場合にのみ表示されるのはなぜですか?

4

0 に答える 0