Mir ist das grundlegende Debuggen bekannt, z. B. die Verwendung der Fehlerberichterstattung. Das Debuggen von Haltepunkten in PHPEclipse ist ebenfalls sehr nützlich.
Was ist der beste (in Bezug auf schnelle und einfache) Weg, um in phpStorm oder einer anderen IDE zu debuggen?
Ich glaube das ist eine großartige Frage! Wenn Sie nicht wissen, wie Sie mit dem PHP-Debugging umgehen sollen, wissen Sie nicht einmal, wie Sie Ihre Frage formulieren sollen, und wissen nicht, wie Sie präziser vorgehen sollen. Es mag also nicht den Regeln von Stack entsprechen, aber es hilft uns Anfängern sehr!
Mihaela
1
Ab PHP5.4 wurde der neue Debugger für die Befehlszeilenschnittstelle namens phpdbg ( phpdbg.com ) eingeführt. PHP5.6 wird mit Standard-PHPDBG geliefert.
Ganesh Patil
1
Schon mal was von XDebug gehört? :)
Pratik
Antworten:
145
Versuchen Sie Eclipse PDT, um eine Eclipse-Umgebung mit Debugging-Funktionen wie den von Ihnen erwähnten einzurichten. Die Möglichkeit, in den Code einzusteigen, ist eine viel bessere Möglichkeit zum Debuggen als die alte Methode von var_dump und das Drucken an verschiedenen Stellen, um festzustellen, wo Ihr Ablauf schief geht. Wenn alles andere fehlschlägt , obwohl und alles , was ich habe , ist SSH und Vim ich noch var_dump()/ die()zu finden , wo der Code nach Süden geht.
Sie sollten diese Funktion verwenden: kill ($ data) {die (var_dump ($ data)); } Es spart die Eingabe von 10 Zeichen, die beste Funktion, die ich je geschrieben habe :)
Vielen Dank. Das hat mir den Tag gerettet. (Ich musste nur das E_STRICT entfernen)
Sec
4
assert_callcackheh
Madbreaks
32
Xdebug und das DBGp-Plugin für Notepad ++ für die Hochleistungs-Fehlersuche, FirePHP für leichtes Material. Schnell und dreckig? Nichts geht über dBug .
Das DBGp-Plugin funktioniert nicht mit der aktuellen Version von Notepad ++ / xdebug und es gibt keine Pläne, dies zu beheben. Sie können meine Diskussion mit dem Schöpfer hier
Joe
26
XDebug ist für die Entwicklung unerlässlich. Ich installiere es vor jeder anderen Erweiterung. Es gibt Ihnen Stapelspuren für jeden Fehler und Sie können die Profilerstellung einfach aktivieren.
Für einen kurzen Blick auf eine Datenstruktur verwenden var_dump(). Nicht verwenden, print_r()da Sie es umgeben müssen <pre>und jeweils nur eine Variable gedruckt wird.
<?php var_dump(__FILE__, __LINE__, $_REQUEST);?>
Für eine echte Debugging-Umgebung ist Komodo IDE das Beste, was ich gefunden habe, aber es kostet $$.
PhpEd ist wirklich gut. Sie können Funktionen betreten / überschreiten / verlassen. Sie können Ad-hoc-Code ausführen, Variablen überprüfen und Variablen ändern. Es ist unglaublich.
Ich habe PhpEd verwendet und habe im Vergleich zu einer echten IDE wie NetBeans oder Eclipse keine freundlichen Worte dafür. Dieser Kommentar fügt der Frage auch nichts Nützliches hinzu. -1
Siliconrockstar
Ich habe die meisten IDEs (einschließlich Zend, NetBeans und Eclipse) vor dem Kauf von PhpED Professional ausprobiert, weil es mit anderthalb Meilen das Beste war. Dies war vor ein paar Jahren, also haben sich die anderen vielleicht seitdem verbessert, aber zu der Zeit waren die meisten von ihnen schmerzhaft langsam, weil sie in Java geschrieben wurden. Ich verstehe nicht, wie jemand "keine freundlichen Worte dafür" haben kann, wenn (für mich) es so eindeutig das Beste war, dass die Entscheidung ein Kinderspiel war.
lm713
17
1) Ich benutze print_r (). In TextMate habe ich ein Snippet für 'pre', das sich dahingehend erweitert:
echo "<pre>";
print_r();
echo "</pre>";
2) Ich verwende Xdebug, konnte aber die GUI auf meinem Mac nicht richtig zum Laufen bringen. Es wird zumindest eine lesbare Version des Stack-Trace ausgedruckt.
Ich bin sicher, Sie meinen Echo "</ pre>"; am Ende aber.
Altermativ
9
Sie können der Funktion auch 'true' übergeben, damit die Zeichenfolge zurückgegeben wird. Es bedeutet, dass Sie dies tun können:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat
16
Ich habe das Zend Studio (5.5) zusammen mit der Zend Platform verwendet . Das gibt ordentliches Debuggen, Haltepunkte / Überspringen des Codes usw., wenn auch zu einem Preis.
Ehrlich gesagt eine Kombination aus print und print_r (), um die Variablen auszudrucken. Ich weiß, dass viele andere fortgeschrittenere Methoden bevorzugen, aber ich finde, dass dies am einfachsten zu verwenden ist.
Ich werde sagen, dass ich das erst richtig verstanden habe, als ich an der Uni Mikroprozessor-Programmierung durchgeführt habe und nicht einmal dies nutzen konnte.
Ich bin froh, dass Sie sowohl print als auch print_r erwähnt haben. Ich verwende einen Basisdruck, um festzustellen, ob der Code bis zu einem bestimmten Punkt ausgeführt wurde, was zur Eingrenzung des Problems beiträgt.
Brad
Ich benutze sowohl print als auch var_dump (). Ich verwende print, um Debug-Meldungen und -Informationen anzuzeigen, und var_dump, um den Status von Variablen im Verlauf anzuzeigen.
Joshua K
14
Xdebug von Derick Rethans ist sehr gut. Ich habe es vor einiger Zeit benutzt und festgestellt, dass es nicht so einfach zu installieren ist. Sobald Sie fertig sind, werden Sie nicht verstehen, wie Sie ohne es geschafft haben :-)
Es gibt einen guten Artikel über Zend Developer Zone (die Installation unter Linux scheint nicht einfacher zu sein) und sogar ein Firefox-Plugin , das ich nie benutzt habe.
Es ist nicht nur frustrierend zu installieren. Das Konfigurieren von Xdebug für die Arbeit mit Eclipse kann ein Albtraum sein. Ich konnte Xdebug unter CentOS 5 installieren, aber EclipsePDT + Xdebug möchte nicht zusammenarbeiten :(
Jahangir
11
Ich benutze Netbeans mit XDebug. Auf der Website finden Sie Dokumente zur Konfiguration.
http://php.netbeans.org/
Das Add-On ist wichtig, wenn Sie MVC-Projekte debuggen, da XDebug normalerweise in Netbeans ausgeführt wird, indem die DBUG-Sitzung über die URL registriert wird. Wenn das Add-On in FireFox installiert ist, legen Sie die Eigenschaften Ihres Netbeans-Projekts fest -> Konfiguration ausführen -> Erweitert und wählen "Webbrowser nicht öffnen". Sie können jetzt Ihre Haltepunkte festlegen und die Debugging-Sitzung wie gewohnt mit Strg-F5 starten . Öffnen Sie FireFox und klicken Sie mit der rechten Maustaste auf das Add-On-Symbol in der rechten unteren Ecke, um die Überwachung auf Haltepunkte zu starten. Wenn der Code den Haltepunkt erreicht, wird er gestoppt und Sie können Ihre Variablenzustände und den Aufrufstapel überprüfen.
Die Ausgabepufferung ist sehr nützlich, wenn Sie Ihre Ausgabe nicht durcheinander bringen möchten. Ich mache das in einem Einzeiler, den ich nach Belieben kommentieren / kommentieren kann
Für die wirklich schwierigen Probleme, die zu zeitaufwändig wären, um mit print_r / echo herauszufinden, verwende ich die Debugging-Funktion meiner IDE (PhpEd). Im Gegensatz zu anderen IDEs, die ich verwendet habe, erfordert PhpEd so gut wie kein Setup. Der einzige Grund, warum ich es nicht für Probleme benutze, ist, dass es schmerzhaft langsam ist. Ich bin nicht sicher, ob Langsamkeit spezifisch für PhpEd oder einen PHP-Debugger ist. PhpEd ist nicht kostenlos, aber ich glaube, es verwendet trotzdem einen der Open-Source-Debugger (wie XDebug). Der Vorteil von PhpEd ist wiederum, dass es kein Setup erfordert, was ich in der Vergangenheit als ziemlich langweilig empfunden habe.
Der PHPEd-Debugger wurde tatsächlich von demselben Typ geschrieben, der auch PHPEd geschrieben hat, und ich bin mir ziemlich sicher, dass es sich nicht um Open Source handelt. Zumindest wird PHPEd nicht mit der Quelle ausgeliefert, sondern kompiliert .so und .dll.
Artem Russakovskii
4
Manuelles Debuggen ist für mich im Allgemeinen schneller - var_dump()und bietet debug_print_backtrace()alle Tools, mit denen Sie Ihre Logik aktivieren können.
Nun, bis zu einem gewissen Grad hängt es davon ab, wohin die Dinge nach Süden gehen. Das ist das erste, was ich zu isolieren versuche, und dann verwende ich nach Bedarf echo / print_r ().
NB: Ihr wisst, dass ihr als zweites Argument true an print_r () übergeben könnt und die Ausgabe zurückgibt, anstatt sie zu drucken? Z.B:
Ich verpacke das einfach in eine Funktion namens Debug. Also kann ich debuggen ($ var);
jdelator
3
Ich benutze oft CakePHP, wenn Rails nicht möglich ist. Um Fehler zu debuggen, finde ich das normalerweise error.logim tmp-Ordner und beschließe es im Terminal mit dem Befehl ...
tail -f app/tmp/logs/error.log
Es gibt Ihnen einen laufenden Dialog von Kuchen über das, was gerade passiert, was ziemlich praktisch ist, wenn Sie etwas in der Mitte des Codes ausgeben möchten, den Sie verwenden können.
$this->log('xxxx');
Dies kann Ihnen normalerweise eine gute Vorstellung davon geben, was los / falsch ist.
Komodo IDE funktioniert gut mit xdebug, auch für das Remore-Debugging. Es erfordert ein Minimum an Konfiguration. Alles, was Sie brauchen, ist eine Version von PHP, die Komodo lokal verwenden kann, um den Code auf einem Haltepunkt zu durchlaufen. Wenn Sie das Skript in ein Komodo-Projekt importiert haben, können Sie mit einem Mausklick Haltepunkte festlegen, wie Sie es in Eclipse für das Debuggen eines Java-Programms festlegen würden. Remote-Debugging ist offensichtlich schwieriger, damit es ordnungsgemäß funktioniert (möglicherweise müssen Sie die Remote-URL mit einem PHP-Skript in Ihrem Arbeitsbereich zuordnen) als ein lokales Debugging-Setup, das auf einem MAC- oder Linux-Desktop recht einfach zu konfigurieren ist .
Es gibt viele PHP-Debugging-Techniken, mit denen Sie beim Codieren unzählige Stunden sparen können. Eine effektive, aber grundlegende Debugging-Technik besteht darin, die Fehlerberichterstattung einfach zu aktivieren. Eine weitere, etwas fortgeschrittenere Technik ist die Verwendung von Druckanweisungen, mit deren Hilfe schwer fassbare Fehler lokalisiert werden können, indem angezeigt wird, was tatsächlich auf dem Bildschirm angezeigt wird. PHPeclipse ist ein Eclipse-Plug-In, das häufig auftretende Syntaxfehler hervorheben und in Verbindung mit einem Debugger zum Festlegen von Haltepunkten verwendet werden kann.
Ich benutze Zend Studio für Eclipse mit dem eingebauten Debugger. Es ist immer noch langsam im Vergleich zum Debuggen mit Eclipse PDF mit Xdebug. Hoffentlich werden sie diese Probleme beheben. Die Geschwindigkeit hat sich gegenüber den letzten Versionen verbessert, aber das Übergehen dauert 2-3 Sekunden. Die zend Firefox-Symbolleiste macht die Sache wirklich einfach (Debuggen der nächsten Seite, der aktuellen Seite usw.). Außerdem bietet es einen Profiler, der Ihren Code bewertet und Kreisdiagramme, Ausführungszeit usw. bereitstellt.
Die meisten Fehler können einfach gefunden werden var_dump Eingeben einiger Schlüsselvariablen gefunden werden, aber es hängt natürlich davon ab, welche Art von Anwendung Sie entwickeln.
Für komplexere Algorithmen sind die Step / Breakpoint / Watch-Funktionen sehr hilfreich (falls nicht erforderlich).
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.
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:
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.des einfach in , machen Sie es ausführbar ( chmod +x dtruss-php.d) und führen Sie es aus:
Auf einem anderen Terminal ausführen : php -r "phpinfo();".
Um dies zu testen, können Sie zu jedem Docroot gehen index.phpund 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 .
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:
+1 für print_r (). Verwenden Sie diese Option, um den Inhalt eines Objekts oder einer Variablen auszugeben. Um die Lesbarkeit zu verbessern, verwenden Sie ein Pre-Tag, damit Sie die Quelle nicht anzeigen müssen.
echo '<pre>';
print_r($arrayOrObject);
Auch var_dump ($ thing) - dies ist sehr nützlich, um die Art der Unterthemen zu sehen
Abhängig vom Problem mag ich eine Kombination aus Fehlerberichterstattung (E_ALL) gemischt mit Echotests (um die fehlerhafte Zeile / Datei zu finden, in der der Fehler ursprünglich aufgetreten ist; Sie wissen, dass es nicht immer die Zeile / Datei ist, die PHP Ihnen sagt, oder?), IDE-Klammerübereinstimmung (um "Analysefehler: Syntaxfehler, unerwartete $ end" -Probleme zu beheben) und print_r (); Ausfahrt; Dumps (echte Programmierer sehen die Quelle; p).
Sie können phpdebug (check sourceforge) auch nicht mit "memory_get_usage ();" und "memory_get_peak_usage ();" die Problembereiche zu finden.
Die integrierten Debugger, in denen Sie die Werte der Variablenänderung beobachten können, während Sie den Code durchlaufen, sind wirklich cool. Sie erfordern jedoch ein Software-Setup auf dem Server und eine gewisse Konfiguration auf dem Client. Beide erfordern eine regelmäßige Wartung, um einen einwandfreien Zustand zu gewährleisten.
Ein print_r ist einfach zu schreiben und funktioniert garantiert in jedem Setup.
Normalerweise finde ich eine benutzerdefinierte Protokollfunktion erstellen, die in der Lage ist, Dateien zu speichern, Debug-Informationen zu speichern und schließlich in einer allgemeinen Fußzeile erneut zu drucken.
Sie können auch die allgemeine Ausnahmeklasse überschreiben, sodass diese Art des Debuggens halbautomatisch ist.
Antworten:
Versuchen Sie Eclipse PDT, um eine Eclipse-Umgebung mit Debugging-Funktionen wie den von Ihnen erwähnten einzurichten. Die Möglichkeit, in den Code einzusteigen, ist eine viel bessere Möglichkeit zum Debuggen als die alte Methode von var_dump und das Drucken an verschiedenen Stellen, um festzustellen, wo Ihr Ablauf schief geht. Wenn alles andere fehlschlägt , obwohl und alles , was ich habe , ist SSH und Vim ich noch
var_dump()
/die()
zu finden , wo der Code nach Süden geht.quelle
kill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Sie können Firephp als Add-On zu Firebug verwenden, um PHP in derselben Umgebung wie Javascript zu debuggen.
Ich benutze auch Xdebug, das bereits erwähnt wurde, um PHP zu profilieren.
quelle
Dies ist meine kleine Debug-Umgebung:
quelle
assert_callcack
hehXdebug und das DBGp-Plugin für Notepad ++ für die Hochleistungs-Fehlersuche, FirePHP für leichtes Material. Schnell und dreckig? Nichts geht über dBug .
quelle
XDebug ist für die Entwicklung unerlässlich. Ich installiere es vor jeder anderen Erweiterung. Es gibt Ihnen Stapelspuren für jeden Fehler und Sie können die Profilerstellung einfach aktivieren.
Für einen kurzen Blick auf eine Datenstruktur verwenden
var_dump()
. Nicht verwenden,print_r()
da Sie es umgeben müssen<pre>
und jeweils nur eine Variable gedruckt wird.Für eine echte Debugging-Umgebung ist Komodo IDE das Beste, was ich gefunden habe, aber es kostet $$.
quelle
PhpEd ist wirklich gut. Sie können Funktionen betreten / überschreiten / verlassen. Sie können Ad-hoc-Code ausführen, Variablen überprüfen und Variablen ändern. Es ist unglaublich.
quelle
1) Ich benutze print_r (). In TextMate habe ich ein Snippet für 'pre', das sich dahingehend erweitert:
2) Ich verwende Xdebug, konnte aber die GUI auf meinem Mac nicht richtig zum Laufen bringen. Es wird zumindest eine lesbare Version des Stack-Trace ausgedruckt.
quelle
echo '<pre>', print_r($var, true), '</pre>';
Ich habe das Zend Studio (5.5) zusammen mit der Zend Platform verwendet . Das gibt ordentliches Debuggen, Haltepunkte / Überspringen des Codes usw., wenn auch zu einem Preis.
quelle
Ehrlich gesagt eine Kombination aus print und print_r (), um die Variablen auszudrucken. Ich weiß, dass viele andere fortgeschrittenere Methoden bevorzugen, aber ich finde, dass dies am einfachsten zu verwenden ist.
Ich werde sagen, dass ich das erst richtig verstanden habe, als ich an der Uni Mikroprozessor-Programmierung durchgeführt habe und nicht einmal dies nutzen konnte.
quelle
Xdebug von Derick Rethans ist sehr gut. Ich habe es vor einiger Zeit benutzt und festgestellt, dass es nicht so einfach zu installieren ist. Sobald Sie fertig sind, werden Sie nicht verstehen, wie Sie ohne es geschafft haben :-)
Es gibt einen guten Artikel über Zend Developer Zone (die Installation unter Linux scheint nicht einfacher zu sein) und sogar ein Firefox-Plugin , das ich nie benutzt habe.
quelle
Ich benutze Netbeans mit XDebug. Auf der Website finden Sie Dokumente zur Konfiguration. http://php.netbeans.org/
quelle
Ich verwende Netbeans mit XDebug und dem Easy XDebug FireFox Add-on
Das Add-On ist wichtig, wenn Sie MVC-Projekte debuggen, da XDebug normalerweise in Netbeans ausgeführt wird, indem die DBUG-Sitzung über die URL registriert wird. Wenn das Add-On in FireFox installiert ist, legen Sie die Eigenschaften Ihres Netbeans-Projekts fest -> Konfiguration ausführen -> Erweitert und wählen "Webbrowser nicht öffnen". Sie können jetzt Ihre Haltepunkte festlegen und die Debugging-Sitzung wie gewohnt mit Strg-F5 starten . Öffnen Sie FireFox und klicken Sie mit der rechten Maustaste auf das Add-On-Symbol in der rechten unteren Ecke, um die Überwachung auf Haltepunkte zu starten. Wenn der Code den Haltepunkt erreicht, wird er gestoppt und Sie können Ihre Variablenzustände und den Aufrufstapel überprüfen.
quelle
Die Ausgabepufferung ist sehr nützlich, wenn Sie Ihre Ausgabe nicht durcheinander bringen möchten. Ich mache das in einem Einzeiler, den ich nach Belieben kommentieren / kommentieren kann
quelle
PhpEdit hat einen eingebauten Debugger, aber ich benutze normalerweise echo (); und print_r (); die altmodische Art !!
quelle
Für die wirklich schwierigen Probleme, die zu zeitaufwändig wären, um mit print_r / echo herauszufinden, verwende ich die Debugging-Funktion meiner IDE (PhpEd). Im Gegensatz zu anderen IDEs, die ich verwendet habe, erfordert PhpEd so gut wie kein Setup. Der einzige Grund, warum ich es nicht für Probleme benutze, ist, dass es schmerzhaft langsam ist. Ich bin nicht sicher, ob Langsamkeit spezifisch für PhpEd oder einen PHP-Debugger ist. PhpEd ist nicht kostenlos, aber ich glaube, es verwendet trotzdem einen der Open-Source-Debugger (wie XDebug). Der Vorteil von PhpEd ist wiederum, dass es kein Setup erfordert, was ich in der Vergangenheit als ziemlich langweilig empfunden habe.
quelle
Manuelles Debuggen ist für mich im Allgemeinen schneller -
var_dump()
und bietetdebug_print_backtrace()
alle Tools, mit denen Sie Ihre Logik aktivieren können.quelle
Nun, bis zu einem gewissen Grad hängt es davon ab, wohin die Dinge nach Süden gehen. Das ist das erste, was ich zu isolieren versuche, und dann verwende ich nach Bedarf echo / print_r ().
NB: Ihr wisst, dass ihr als zweites Argument true an print_r () übergeben könnt und die Ausgabe zurückgibt, anstatt sie zu drucken? Z.B:
quelle
Ich benutze oft CakePHP, wenn Rails nicht möglich ist. Um Fehler zu debuggen, finde ich das normalerweise
error.log
im tmp-Ordner und beschließe es im Terminal mit dem Befehl ...Es gibt Ihnen einen laufenden Dialog von Kuchen über das, was gerade passiert, was ziemlich praktisch ist, wenn Sie etwas in der Mitte des Codes ausgeben möchten, den Sie verwenden können.
Dies kann Ihnen normalerweise eine gute Vorstellung davon geben, was los / falsch ist.
quelle
print_r (debug_backtrace ());
oder etwas ähnliches :-)
quelle
Komodo IDE funktioniert gut mit xdebug, auch für das Remore-Debugging. Es erfordert ein Minimum an Konfiguration. Alles, was Sie brauchen, ist eine Version von PHP, die Komodo lokal verwenden kann, um den Code auf einem Haltepunkt zu durchlaufen. Wenn Sie das Skript in ein Komodo-Projekt importiert haben, können Sie mit einem Mausklick Haltepunkte festlegen, wie Sie es in Eclipse für das Debuggen eines Java-Programms festlegen würden. Remote-Debugging ist offensichtlich schwieriger, damit es ordnungsgemäß funktioniert (möglicherweise müssen Sie die Remote-URL mit einem PHP-Skript in Ihrem Arbeitsbereich zuordnen) als ein lokales Debugging-Setup, das auf einem MAC- oder Linux-Desktop recht einfach zu konfigurieren ist .
quelle
Nusphere ist auch ein guter Debugger für PHP Nusphere
quelle
Es gibt viele PHP-Debugging-Techniken, mit denen Sie beim Codieren unzählige Stunden sparen können. Eine effektive, aber grundlegende Debugging-Technik besteht darin, die Fehlerberichterstattung einfach zu aktivieren. Eine weitere, etwas fortgeschrittenere Technik ist die Verwendung von Druckanweisungen, mit deren Hilfe schwer fassbare Fehler lokalisiert werden können, indem angezeigt wird, was tatsächlich auf dem Bildschirm angezeigt wird. PHPeclipse ist ein Eclipse-Plug-In, das häufig auftretende Syntaxfehler hervorheben und in Verbindung mit einem Debugger zum Festlegen von Haltepunkten verwendet werden kann.
und auch verwendet
quelle
In einer Produktionsumgebung protokolliere ich relevante Daten mit error_log () im Fehlerprotokoll des Servers.
quelle
Ich benutze Zend Studio für Eclipse mit dem eingebauten Debugger. Es ist immer noch langsam im Vergleich zum Debuggen mit Eclipse PDF mit Xdebug. Hoffentlich werden sie diese Probleme beheben. Die Geschwindigkeit hat sich gegenüber den letzten Versionen verbessert, aber das Übergehen dauert 2-3 Sekunden. Die zend Firefox-Symbolleiste macht die Sache wirklich einfach (Debuggen der nächsten Seite, der aktuellen Seite usw.). Außerdem bietet es einen Profiler, der Ihren Code bewertet und Kreisdiagramme, Ausführungszeit usw. bereitstellt.
quelle
Die meisten Fehler können einfach gefunden werden
var_dump
Eingeben einiger Schlüsselvariablen gefunden werden, aber es hängt natürlich davon ab, welche Art von Anwendung Sie entwickeln.Für komplexere Algorithmen sind die Step / Breakpoint / Watch-Funktionen sehr hilfreich (falls nicht erforderlich).
quelle
PHP DBG
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:
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):
Dann geben Ihnen alle Fehler Informationen wie Backtrace, Codekontext, Funktionsargumente, Servervariablen usw. Zum Beispiel:
Features sind:
Homepage: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
Meine Gabel (mit zusätzlichen Korrekturen): https://github.com/kenorb-contrib/PHP-Error
DTrace
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:So gegeben folgend Alias wurde von Ihnen hinzugefügt rc - Dateien (zB
~/.bashrc
,~/.bash_aliases
):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:Homepage: dtruss-lamp bei GitHub
Hier ist einfache Verwendung:
sudo dtruss-php.d
.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: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
SystemTap
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:Verwendungszweck:
Siehe: Verwenden von SystemTap mit statischen PHP DTrace-Sonden auf php.net
quelle
+1 für print_r (). Verwenden Sie diese Option, um den Inhalt eines Objekts oder einer Variablen auszugeben. Um die Lesbarkeit zu verbessern, verwenden Sie ein Pre-Tag, damit Sie die Quelle nicht anzeigen müssen.
Auch var_dump ($ thing) - dies ist sehr nützlich, um die Art der Unterthemen zu sehen
quelle
Abhängig vom Problem mag ich eine Kombination aus Fehlerberichterstattung (E_ALL) gemischt mit Echotests (um die fehlerhafte Zeile / Datei zu finden, in der der Fehler ursprünglich aufgetreten ist; Sie wissen, dass es nicht immer die Zeile / Datei ist, die PHP Ihnen sagt, oder?), IDE-Klammerübereinstimmung (um "Analysefehler: Syntaxfehler, unerwartete $ end" -Probleme zu beheben) und print_r (); Ausfahrt; Dumps (echte Programmierer sehen die Quelle; p).
Sie können phpdebug (check sourceforge) auch nicht mit "memory_get_usage ();" und "memory_get_peak_usage ();" die Problembereiche zu finden.
quelle
Die integrierten Debugger, in denen Sie die Werte der Variablenänderung beobachten können, während Sie den Code durchlaufen, sind wirklich cool. Sie erfordern jedoch ein Software-Setup auf dem Server und eine gewisse Konfiguration auf dem Client. Beide erfordern eine regelmäßige Wartung, um einen einwandfreien Zustand zu gewährleisten.
Ein print_r ist einfach zu schreiben und funktioniert garantiert in jedem Setup.
quelle
Normalerweise finde ich eine benutzerdefinierte Protokollfunktion erstellen, die in der Lage ist, Dateien zu speichern, Debug-Informationen zu speichern und schließlich in einer allgemeinen Fußzeile erneut zu drucken.
Sie können auch die allgemeine Ausnahmeklasse überschreiben, sodass diese Art des Debuggens halbautomatisch ist.
quelle