3

PHP アプリケーションでトレーサー ログを作成しようとしています。デバッグ モードをオンにすると、関数のフローの追跡が開始されます。

以下は、私の実装として期待しているものです。

function callA(x) { ... }  //XYZ.php
function callB() { ... callA(1) ... }  //ABC.php

callB(); //main.php

PHPコードの流れを追跡したい。

debug_backtraceを使用できることはわかっていますが、この場合、debug_backtrace関数の 1 つを明示的に呼び出す必要があります。

しかし、私が望むのは、コードの流れを自動的に追跡することです。

それを行う方法はありますか。

4

1 に答える 1

3

通常、これは、PHP 拡張機能として実行される xdebug などのプロファイラーで実行されます。register_tick_functionしかし、PHP 自体で記述されたコードを使用して関数呼び出しを追跡する必要がある場合は、別の関数呼び出しを待つ代わりに、数ネイティブ CPU サイクルごとに「tick 関数」を呼び出す を使用するのが最善です。

declare(ticks = 1);
$calls = array();
function tracer() {
    global $calls;
    $calls[] = array_shift(debug_backtrace());
}
register_tick_function('tracer');
于 2016-04-29T05:31:46.013 に答える