2016-04-29 6 views
-1

Ich versuche, ein Tracer-Protokoll in meiner PHP-Anwendung zu erstellen. Wenn Sie den Debug-Modus einschalten, wird der Ablauf der Funktion verfolgt.Tracing jeder Funktion in PHP ruft

Unten ist das, was ich als meine Implementierung erwarte:

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

callB(); //main.php 

Ich möchte den Fluss des PHP-Code verfolgen.

Ich weiß, dass ich debug_backtrace verwenden kann, aber in diesem Fall muss ich explizit debug_backtrace in einer der Funktion aufrufen.

Allerdings möchte ich den Codefluss automatisch verfolgen.

Gibt es eine Möglichkeit, es zu tun.

Antwort

1

Normalerweise würde dies mit einem Profiler wie xdebug getan werden, der als PHP-Erweiterung läuft. Aber wenn Sie Funktionsaufrufe über in PHP geschriebenen Code verfolgen müssen, verwenden Sie am besten register_tick_function, die Ihre "Tick-Funktion" alle paar native CPU-Zyklen aufruft, anstatt auf einen anderen Funktionsaufruf zu warten.

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

Ich verstehe, dass der Code würde immer 'tracer()' als Debug Tracer würde auch Tracer() 'Funktion verfolgen. –