Ich suche nach einer Möglichkeit, den Aufrufstapel in PHP zu drucken.
Bonuspunkte, wenn die Funktion den E / A-Puffer leert.
php
stack-trace
error-logging
Justin
quelle
quelle
Antworten:
Wenn Sie eine Rückverfolgung generieren möchten, suchen Sie
debug_backtrace
und / oderdebug_print_backtrace
.Mit dem ersten erhalten Sie beispielsweise ein Array wie dieses (unter Angabe des Handbuchs) :
Sie werden den E / A-Puffer anscheinend nicht leeren, aber Sie können dies selbst tun, mit
flush
und / oderob_flush
.(Siehe die Handbuchseite der ersten, um herauszufinden, warum das "und / oder" ;-))
quelle
DEBUG_BACKTRACE_IGNORE_ARGS
Parameter angeben . das macht sie funktional äquivalent zu(new \Exception())->getTraceAsString()
Lesbarer als
debug_backtrace()
:quelle
debug_backtrace
um nur die erste Ebene im Stacktrace zurückzugeben - diese Lösung erledigt die Arbeit für mich. Danke dir!print_r
behält alle Nachrichten.So protokollieren Sie den Trace
Danke @Tobiasz
quelle
Backtrace wirft eine Menge Müll weg, den Sie nicht brauchen. Es dauert sehr lange, schwer zu lesen. Alles, was Sie normalerweise jemals wollen, ist: "Wie heißt was von wo?" Hier ist eine einfache statische Funktionslösung. Normalerweise stelle ich es in eine Klasse namens 'debug', die alle meine Debugging-Dienstprogrammfunktionen enthält.
Sie nennen es so:
Und es erzeugt eine Ausgabe wie folgt:
quelle
Seltsam, dass niemand so gepostet hat:
Dies druckt tatsächlich die Rückverfolgung ohne den Müll - genau welche Methode wurde wo aufgerufen.
quelle
Wenn Sie einen Stack-Trace möchten, der dem Formatieren des Exception-Stack-Trace durch PHP sehr ähnlich sieht, verwenden Sie diese von mir geschriebene Funktion:
Dies gibt einen Stack-Trace zurück, der wie folgt formatiert ist:
quelle
$e = new Exception; echo $e->getTraceAsString();
Macht das was du willst?
quelle
Siehe
debug_print_backtrace
. Ich denke, Sie könnenflush
danach anrufen, wenn Sie wollen.quelle
phptrace ist ein großartiges Tool, um PHP-Stacks jederzeit zu drucken, ohne Erweiterungen zu installieren.
Es gibt zwei Hauptfunktionen von phptrace: erstens den Druckaufrufstapel von PHP, der nichts installieren muss, zweitens den Ablauf der PHP-Ausführungsabläufe, die die von ihm bereitgestellte Erweiterung installieren müssen.
wie folgt:
quelle
Verwenden Sie
debug_backtrace
diese Option, um einen Rückblick darauf zu erhalten, welche Funktionen und Methoden aufgerufen wurden und welche Dateien enthalten waren, die zu dem Punkt führten, an demdebug_backtrace
sie aufgerufen wurden.quelle
Bitte werfen Sie einen Blick auf diese Utils-Klasse, kann hilfreich sein:
Verwendung:
Quellklasse: https://github.com/augustowebd/utils/blob/master/Who.php
quelle
debug_backtrace()
quelle
Vielleicht möchten Sie sich das ansehen
debug_backtrace
oder vielleichtdebug_print_backtrace
.quelle
Die Lösung von Walltearer ist hervorragend, insbesondere wenn sie in einem Pre-Tag eingeschlossen ist:
- die die Anrufe auf getrennten Leitungen anzeigt, ordentlich nummeriert
quelle
Ich habe die Antwort von Don Briggs oben angepasst , um die interne Fehlerprotokollierung anstelle des öffentlichen Drucks zu verwenden. Dies kann Ihr großes Problem sein, wenn Sie an einem Live-Server arbeiten. Außerdem wurden einige weitere Änderungen hinzugefügt, z. B. die Option, anstelle des Basisnamens den vollständigen Dateipfad einzuschließen (da sich möglicherweise Dateien mit demselben Namen in unterschiedlichen Pfaden befinden) und (für diejenigen, die dies benötigen) eine vollständige Ausgabe des Knotenstapels:
quelle