Aktueller Standort: Startseite> Neueste Artikel> Wie kombinieren Sie Debug_backtrace und GetTRACEAsString -Funktionen, um detailliertere PHP -Stack -Informationen zu erhalten?

Wie kombinieren Sie Debug_backtrace und GetTRACEAsString -Funktionen, um detailliertere PHP -Stack -Informationen zu erhalten?

gitbox 2025-09-19

Debugging ist ein sehr wichtiger Schritt während der PHP -Entwicklung. Insbesondere in komplexen Anwendungen werden Fehler und Ausnahmen häufig schwer zu verfolgen. Um den Entwicklern die Lokalisierung von Problemen zu ermöglichen, bietet PHP mehrere Debugging -Tools, darunter die Funktionen debug_backtrace und GetTraceAsString sind zwei häufig verwendete Tools. Sie können Entwicklern helfen, den Ausführungsprozess eines Programms zu verfolgen und detaillierte Stapelinformationen zu generieren.

DEBUG_BACKTRACE -Funktion

Die Funktion debug_backtrace ist ein integriertes Debugging-Tool in PHP, mit dem die Stapelinformationen der aktuellen Codeausführung zurückgegeben werden können. Diese Informationen enthalten normalerweise den Dateinamen, die Zeilennummer, den Funktionsnamen, die Parameter usw. jedes Funktionsaufrufs. Die zurückgegebenen Stapelinformationen werden in einem Array dargestellt. Jedes Element repräsentiert einen Funktionsaufruf.

Beispiel der Nutzung:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">testFunc</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$param</span></span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">debug_backtrace</span></span><span>());
}

</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">outerFunc</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">testFunc</span></span><span>(</span><span><span class="hljs-string">'Hello'</span></span><span>);
}

</span><span><span class="hljs-title function_ invoke__">outerFunc</span></span><span>();
</span></span>

Ausgangsergebnis:

 <span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>) {
  [</span><span><span class="hljs-number">0</span></span><span>]=&gt;
  </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-number">6</span></span><span>) {
    [</span><span><span class="hljs-string">"file"</span></span><span>]=&gt; </span><span><span class="hljs-keyword">string</span></span><span>(</span><span><span class="hljs-number">35</span></span><span>) </span><span><span class="hljs-string">"/path/to/your/script.php"</span></span><span>
    [</span><span><span class="hljs-string">"line"</span></span><span>]=&gt; </span><span><span class="hljs-keyword">int</span></span><span>(</span><span><span class="hljs-number">8</span></span><span>)
    [</span><span><span class="hljs-string">"function"</span></span><span>]=&gt; </span><span><span class="hljs-keyword">string</span></span><span>(</span><span><span class="hljs-number">9</span></span><span>) </span><span><span class="hljs-string">"testFunc"</span></span><span>
    [</span><span><span class="hljs-string">"args"</span></span><span>]=&gt; </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>) { [</span><span><span class="hljs-number">0</span></span><span>]=&gt; </span><span><span class="hljs-keyword">string</span></span><span>(</span><span><span class="hljs-number">5</span></span><span>) </span><span><span class="hljs-string">"Hello"</span></span><span> }
    [</span><span><span class="hljs-string">"object"</span></span><span>]=&gt; </span><span><span class="hljs-literal">NULL</span></span><span>
    [</span><span><span class="hljs-string">"type"</span></span><span>]=&gt; </span><span><span class="hljs-keyword">string</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>) </span><span><span class="hljs-string">"-&gt;"</span></span><span>
  }
}
</span></span>

Wie Sie aus dem Ergebnis sehen können, gibt Debug_backtrace die Details jedes Anrufs zurück. Dies umfasst Dateipfad, Codezeilennummer, Funktionsname, eingehende Parameter usw.

GETTRACEASSSTRING -Funktion

Die GetTraceAsString -Funktion ist eine Methode der Ausnahmegesklasse , die die Stapelinformationen von Ausnahmen in ein leicht zu lesendes String-Format umwandelt. In der Regel wird eine Multi-Line-Zeichenfolge zurückgegeben, wobei jede Zeile einen Funktionsaufruf darstellt. Diese Methode eignet sich besonders zum Ausdrucken der gesamten Stapelinformationen beim Fangen von Ausnahmen.

Beispiel der Nutzung:

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">"Something went wrong"</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getTraceAsString</span></span><span>();
}
</span></span>

Ausgangsergebnis:

 <span><span><span class="hljs-selector-id">#0</span></span><span> /path/</span><span><span class="hljs-selector-tag">to</span></span><span>/your/script</span><span><span class="hljs-selector-class">.php</span></span><span>(</span><span><span class="hljs-number">12</span></span><span>): throw new </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">'Something went wrong'</span></span><span>)
#</span><span><span class="hljs-number">1</span></span><span> {</span><span><span class="hljs-selector-tag">main</span></span><span>}
</span></span>

Zu diesem Zeitpunkt gibt GetTraceAsString die Stapelinformationen der Ausnahme als Zeichenfolge aus und zeigt den Ort an, an dem die Ausnahme auftritt, und die zugehörige Anrufkette.

Kombination

Während sowohl Debug_backtrace als auch GetTraceasString separat verwendet werden können, um Stapelinformationen zu erhalten, benötigen wir manchmal umfassendere Debug -Informationen. Das Kombinieren dieser beiden Funktionen kann jeden Schritt der Programmausführung besser verfolgen und uns dabei helfen, das Problem zu bestimmen.

Beispiel der Kombination:

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">exampleFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-variable">$trace</span></span><span> = </span><span><span class="hljs-title function_ invoke__">debug_backtrace</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Stack Trace from debug_backtrace:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$trace</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$index</span></span><span> =&gt; </span><span><span class="hljs-variable">$entry</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"#"</span></span><span> . </span><span><span class="hljs-variable">$index</span></span><span> . </span><span><span class="hljs-string">" "</span></span><span> . </span><span><span class="hljs-variable">$entry</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>] . </span><span><span class="hljs-string">"("</span></span><span> . </span><span><span class="hljs-variable">$entry</span></span><span>[</span><span><span class="hljs-string">'line'</span></span><span>] . </span><span><span class="hljs-string">"): "</span></span><span> . </span><span><span class="hljs-variable">$entry</span></span><span>[</span><span><span class="hljs-string">'function'</span></span><span>] . </span><span><span class="hljs-string">"()\n"</span></span><span>;
    }

    </span><span><span class="hljs-keyword">try</span></span><span> {
        </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">"Custom Exception for Debugging"</span></span><span>);
    } </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\nException Trace using getTraceAsString:\n"</span></span><span>;
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getTraceAsString</span></span><span>();
    }
}

</span><span><span class="hljs-title function_ invoke__">exampleFunction</span></span><span>();
</span></span>

Ausgangsergebnis:

 <span><span>Stack Trace </span><span><span class="hljs-selector-tag">from</span></span><span> debug_backtrace:
#</span><span><span class="hljs-number">0</span></span><span> /path/to/your/script.</span><span><span class="hljs-built_in">php</span></span><span>(</span><span><span class="hljs-number">9</span></span><span>): </span><span><span class="hljs-built_in">exampleFunction</span></span><span>()

Exception Trace using getTraceAsString:
#</span><span><span class="hljs-number">0</span></span><span> /path/to/your/script.</span><span><span class="hljs-built_in">php</span></span><span>(</span><span><span class="hljs-number">15</span></span><span>): throw new </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">'Custom Exception for Debugging'</span></span><span>)
#</span><span><span class="hljs-number">1</span></span><span> {</span><span><span class="hljs-selector-tag">main</span></span><span>}
</span></span>

erklären:

  1. DEBUG_BACKTRACE gibt die Stapelinformationen der aktuellen Ausführung aus und teilt uns mit, dass die Beispielfunktionsfunktion in Zeile 9 von /path/to/your/script.php aufgerufen wird.

  2. GetTRACEAsString gibt die Stapelinformationen aus, wenn die Ausnahme durch Aufnahme der Ausnahme eintritt. Es bietet eine optimiertere Stapelinformation, bei der jeder Funktionsaufrufstack als Zeichenfolge angezeigt wird.

Wie wähle ich die richtige Methode aus?

  • DEBUG_BACKTRACE : DEBUG_BACKTRACE ist eine sehr gute Wahl, wenn Sie die vollständigen Stapelinformationen des aktuellen Ausführungsprozesses anzeigen möchten. Es kann detaillierte Anrufinformationen bereitstellen, einschließlich Dateipfad, Zeilennummer, Funktionsparameter usw.

  • GetTraceasString : Wenn Sie Ausnahmen abwickeln und präzise Stapelinformationen ausgeben möchten, ist GetTRACEAsString eher anwendbar. Es kann Stapelinformationen in einem leicht zu lesenden Format zurückgeben, was es einfach macht, Probleme schnell zu finden.

Zusammenfassung

Durch die Kombination von Debug_backtrace und GetTreaString können PHP -Entwickler umfassendere und klarere Debugging -Informationen erhalten. DEBUG_BACKTRACE bietet eine genaue Anrufketteninformationen, während getTraceAsString -Ausnahmestapelinformationen als Zeichenfolge zurückgegeben werden. Die Kombination der beiden kann Entwicklern helfen, Fehler zu verfolgen, Probleme effizienter zu finden und die Entwicklungseffizienz beim Debuggen zu verbessern.