2016-04-29 75 views
-1

我想在我的PHP應用程序中創建一個跟蹤日誌。打開調試模式將開始跟蹤功能的流程。在PHP中跟蹤每個函數調用

下面就是我期待我的執行:

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

callB(); //main.php 

我要跟蹤PHP代碼的流程。

我知道我可以使用debug_backtrace,但在這種情況下,我需要在函數中明確調用debug_backtrace

但是,我想要的是自動跟蹤代碼的流程。

有沒有辦法做到這一點。

回答

1

通常情況下,這可以通過一個像xdebug這樣的分析器來完成,該分析器以PHP擴展模式運行。但是,如果您必須通過使用PHP自身編寫的代碼來追蹤函數調用,那麼您可以使用register_tick_function來調用您的「滴答函數」,而不是等待另一個函數調用。

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

我知道代碼總是會發送'tracer()',因爲調試跟蹤器也會跟蹤'tracer()'函數。 –