メソッドで例外のトレースを見ると、一貫して追加のスタック フレームを取得しています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 スタック フレームだと思いますが、トレースを文字列として取得する場合にのみ表示されるのはなぜですか?