2016-04-29 6 views
-1

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

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

callB(); //main.php 

は、私はPHPコードの流れを追跡したい:以下

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

私はdebug_backtraceを使用できますが、この場合は関数の1つで明示的にdebug_backtraceを呼び出す必要があります。

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

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

答えて

1

通常、これはPHP拡張機能として動作するxdebugのようなプロファイラで行われます。しかし、PHP自体で書かれたコードで関数呼び出しをトレースする必要がある場合は、register_tick_functionを使用して、別の関数呼び出しを待つのではなく、いくつかのネイティブCPUサイクルごとに "ティック関数"を呼び出します。

declare(ticks = 1); 
$calls = array(); 
function tracer() { 
    global $calls; 
    $calls[] = array_shift(debug_backtrace()); 
} 
register_tick_function('tracer'); 
+1

デバッグトレーサも 'tracer()'関数をトレースするので、コードは常に 'tracer()'を送信することを理解します。 –

関連する問題