Der als SAPI-Modul implementierte interaktive Stepthrough-PHP-Debugger bietet Ihnen die vollständige Kontrolle über die Umgebung, ohne die Funktionalität oder Leistung Ihres Codes zu beeinträchtigen. Es soll eine leichte, leistungsstarke und benutzerfreundliche Debugging-Plattform für PHP 5.4+ sein und wird sofort mit PHP 5.6 ausgeliefert.
Eigenschaften umfasst:
- Stepthrough-Debugging
- Flexible Haltepunkte (Klassenmethode, Funktion, Datei: Zeile, Adresse, Opcode)
- Einfacher Zugriff auf PHP mit integriertem eval ()
- Einfacher Zugriff auf aktuell ausgeführten Code
- Userland API
- SAPI Agnostic - Einfach zu integrieren
- Unterstützung für PHP-Konfigurationsdateien
- JIT Super Globals - Stellen Sie Ihre eigenen ein !!
- Optionale Readline-Unterstützung - Komfortabler Terminalbetrieb
- Remote-Debugging-Unterstützung - Gebündelte Java-GUI
- Einfache Operation
Siehe die Screenshots:
Homepage: http://phpdbg.com/
PHP-Fehler - Bessere Fehlerberichterstattung für PHP
Dies ist eine sehr einfach zu verwendende Bibliothek (eigentlich eine Datei) zum Debuggen Ihrer PHP-Skripte.
Das einzige, was Sie tun müssen, ist, eine Datei wie folgt einzufügen (am Anfang Ihres Codes):
require('php_error.php');
\php_error\reportErrors();
Dann geben Ihnen alle Fehler Informationen wie Backtrace, Codekontext, Funktionsargumente, Servervariablen usw. Zum Beispiel:
Features sind:
- trivial zu bedienen, es ist nur eine Datei
- Fehler, die im Browser für normale und Ajaxy-Anfragen angezeigt werden
- AJAX-Anforderungen werden angehalten, sodass Sie sie automatisch erneut ausführen können
- macht Fehler so streng wie möglich (fördert die Codequalität und verbessert tendenziell die Leistung)
- Code-Schnipsel über den gesamten Stack-Trace
- bietet weitere Informationen (z. B. Signaturen mit voller Funktion)
- behebt einige Fehlermeldungen, die einfach falsch sind
- Satzstellung markieren
- sieht gut aus!
- Anpassung
- manuell ein- und ausschalten
- Führen Sie bestimmte Abschnitte ohne Fehlerberichterstattung aus
- Ignorieren Sie Dateien, um zu vermeiden, dass Code in Ihrem Stack-Trace hervorgehoben wird
- Anwendungsdateien; Diese werden priorisiert, wenn ein Fehler auftritt!
Homepage: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Meine Gabel (mit zusätzlichen Korrekturen): https://github.com/kenorb-contrib/PHP-Error
Wenn Ihr System die dynamische DTrace-Ablaufverfolgung unterstützt (standardmäßig unter OS X installiert) und Ihr PHP mit aktivierten DTrace-Tests ( --enable-dtrace
) kompiliert ist, die standardmäßig aktiviert sein sollten, kann dieser Befehl Ihnen helfen, das PHP-Skript ohne Zeitaufwand zu debuggen:
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
So gegeben folgend Alias wurde von Ihnen hinzugefügt rc - Dateien (zB ~/.bashrc
, ~/.bash_aliases
):
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
Sie können Ihr Skript mit einem leicht zu merkenden Alias verfolgen : trace-php
.
Hier ist ein erweitertes dtrace-Skript. Speichern Sie dtruss-php.d
es einfach in , machen Sie es ausführbar ( chmod +x dtruss-php.d
) und führen Sie es aus:
#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d
#pragma D option quiet
php*:::compile-file-entry
{
printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}
php*:::compile-file-return
{
printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}
php*:::error
{
printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::exception-caught
{
printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::exception-thrown
{
printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::execute-entry
{
printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::execute-return
{
printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::function-entry
{
printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::function-return
{
printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::request-shutdown
{
printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
php*:::request-startup
{
printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
Homepage: dtruss-lamp bei GitHub
Hier ist einfache Verwendung:
- Führen Sie aus :
sudo dtruss-php.d
.
- Auf einem anderen Terminal ausführen :
php -r "phpinfo();"
.
Um dies zu testen, können Sie zu jedem Docroot gehen index.php
und den in PHP integrierten Server ausführen, indem Sie:
php -S localhost:8080
Danach können Sie auf die Site unter http: // localhost: 8080 / zugreifen. (oder den für Sie geeigneten Port auswählen). Von dort aus können Sie auf einige Seiten zugreifen, um die Trace-Ausgabe anzuzeigen.
Hinweis: Dtrace ist standardmäßig unter OS X verfügbar. Unter Linux benötigen Sie wahrscheinlich dtrace4linux oder suchen nach anderen Alternativen .
Siehe: Verwenden von PHP und DTrace auf php.net
Alternativ können Sie die SystemTap-Ablaufverfolgung überprüfen, indem Sie das SystemTap SDT-Entwicklungspaket installieren (z yum install systemtap-sdt-devel
. B. ).
Hier ist ein Beispielskript ( all_probes.stp
) zum Verfolgen aller statischen Kernprüfpunkte von PHP während der Dauer eines laufenden PHP-Skripts mit SystemTap:
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
Verwendungszweck:
stap -c 'sapi/cli/php test.php' all_probes.stp
Siehe: Verwenden von SystemTap mit statischen PHP DTrace-Sonden auf php.net