Xdebug - Professionelles PHP-Debugging

Unsere Agenda

  1. Einführung in das Thema.
  2. Herunterladen und Installieren von Xdebug auf Ihrem lokalen Computer (Mac OS X 10.6.6 und höher, MAMP 2.1.1).
  3. Integration mit PhpStorm.
  4. Üben Sie das Debuggen.

Was wirst du brauchen

  • Ein Mac mit Mac OS X 10.6.6+.
    • Wenn Sie am 10.8.X sind kann XQuartz muss installiert werden, da Apple X11 entfernt hat.
    • Wenn Sie Windows verwenden, ist der gesamte Vorgang etwas einfacher. Klicken Sie einfach auf Google, um weitere Informationen zu erhalten.
  • Apple Xcode 4.6 (kostenlos im Mac App Store).
    • Befehlszeilen-Tools.
  • Homebrew.
  • Eine Terminal-App Ihrer Wahl.
  • PhpStorm 5+ (viele andere IDE werden auch funktionieren).

Was ist Xdebug??

Technisch gesehen ist Xdebug eine Erweiterung für PHP, die Ihnen das Debuggen Ihres Codes erleichtert. Im Moment können Sie mit verschiedenen anderen einfachen Lösungen zum Debuggen Ihres Codes verwendet werden. Dazu gehören die Verwendung Echo Anweisungen in verschiedenen Status innerhalb Ihres Programms, um herauszufinden, ob Ihre Anwendung eine Bedingung übergibt, oder um den Wert einer bestimmten Variablen abzurufen. Darüber hinaus können Sie häufig Funktionen wie verwenden var_dump, print_r oder andere, um Objekte und Arrays zu untersuchen.

Was mir oft begegnet, sind kleine Hilfsfunktionen, wie zum Beispiel diese:

Funktionsauszug ($ value) echo '
'; var_dump ($ value); Echo '
';

Die Wahrheit ist, ich habe das auch schon sehr lange gemacht.

Die Wahrheit ist, ich habe das auch schon sehr lange gemacht. Also, was ist daran falsch? Technisch ist daran nichts auszusetzen. Es funktioniert und macht, was es tun soll.

Stellen Sie sich jedoch vor, Sie könnten sich während der Entwicklung Ihrer Anwendungen daran gewöhnen, Ihren Code mit kleinen Echos, var_dumps und benutzerdefinierten Debuggern zu besprühen. Nun, dies gilt zwar nicht während des Test-Workflows, aber was passiert, wenn Sie den Debug-Code vor der Produktion vergessen? Dies kann zu einigen ziemlich beängstigenden Problemen führen, da diese winzigen Debugger sogar den Weg in die Versionskontrolle finden und lange dort bleiben können.

Die nächste Frage lautet: Wie debuggen Sie in der Produktion? Stellen Sie sich vor, Sie surfen mit einem Ihrer bevorzugten Web-Services, und plötzlich erhalten Sie eine große Auswahl an Debug-Informationen auf dem Bildschirm. Jetzt kann es natürlich nach der nächsten Browseraktualisierung verschwinden, aber es ist keine sehr gute Erfahrung für den Benutzer der Website.

Haben Sie sich schon einmal gewünscht, in der Lage zu sein, Ihren Code Schritt für Schritt durchzugehen, Ausdrücke zu beobachten und sogar in einen Funktionsaufruf zu gelangen, um zu sehen, warum er den falschen Rückgabewert erzeugt?

Nun, Sie sollten definitiv in die Welt des professionellen Debugging mit eintauchen Xdebug, da es alle oben genannten Probleme lösen kann.


MAMP konfigurieren

Ich möchte nicht zu tief in den Download- und Installationsprozess von MAMP auf einem Mac eingehen. Stattdessen teile ich Ihnen einfach mit, dass ich in diesem Lesevorgang PHP 5.4.4 und den Standard-Apache-Port (80) verwende.


Ihre erste Entscheidung

Bevor wir mit dem Bau eines eigenen Xdebug über Homebrew beginnen, wird kurz darauf hingewiesen: Wenn Sie den einfachsten Weg nehmen wollen, wird MAMP bereits mit Xdebug 2.2.0 ausgeliefert. Um es zu aktivieren, öffnen Sie:

/Applications/MAMP/bin/php/php5.4.4/conf/php.ini

Gehen Sie mit einem Texteditor Ihrer Wahl ganz nach unten und kommentieren Sie die letzte Zeile durch Entfernen der ;.

Die letzten beiden Zeilen der Datei sollten folgendermaßen lauten:

[xdebug] zend_extension = "/ Applications / MAMP / bin / php / php5.4.4 / lib / php / extensions / no-debug-non-zts-20100525 / xdebug.so"

Nun, wenn Sie sich fragen:

"Warum sollte ich einen härteren Weg als diesen wählen wollen?"

Und meine Antwort darauf ist, dass es niemals ein Fehler ist, über Ihren Tellerrand hinauszuschauen und etwas Neues zu lernen. Gerade als Entwickler ist es heutzutage immer nützlich, sich mit Servern in Verbindung zu setzen. Versprochen.


Installieren Sie die Xcode- und Befehlszeilen-Tools

Sie können Apple Xcode im Mac App Store kostenlos erhalten. Nachdem Sie es heruntergeladen haben, gehen Sie zu den Anwendungseinstellungen und klicken Sie auf "Downloads" Registerkarte und installieren Sie die "Befehlszeilen-Tools" von der Liste.


Installieren Sie Homebrew

Homebrew ist ein übersichtlicher, kleiner Paketmanager für Mac OS X, der Ihnen all das bietet, was Apple ausgelassen hat. Um Homebrew zu installieren, fügen Sie einfach den folgenden Befehl in Ihr Terminal ein.

ruby -e "$ (curl -fsSkL raw.github.com/mxcl/homebrew/go)"

Auf einem Mac ist Homebrew die bequemste Art, Xdebug zu installieren. Unter Linux ist das Kompilieren jedoch der beste Weg. Das ist auf einem Mac nicht so einfach.

Tipp: Windows-Benutzer müssen nur das herunterladen * .dll Datei von Xdebug.org, legen Sie sie im XAMPP-Ordner ab und fügen Sie den Pfad zu ihrem Ordner hinzu php.ini Datei.

Als PHP-Entwickler sollten Sie von nun an auf Jose Gonzalez '"homebrew-php" Github-Repo achten, das viele nützliche "Gebräue" für Sie enthält. Wenn Sie sich schon einmal gefragt haben, wie Sie PHP 5.4 manuell installieren, sind Sie hier genau richtig.

Wenn Sie bei der Installation von Homebrew in Schwierigkeiten geraten, lesen Sie die Readme von Jose.

Um unsere Homebrew-Exkursion abzuschließen, möchten wir Jose 'Brauformeln "abrufen", indem Sie die folgenden Befehle in Ihrer Terminalanwendung ausführen:

Brausetopf Homebrew / Dupes

Dies bringt uns einige Abhängigkeiten hervor, die wir für Jose 'Formeln brauchen.

Brausetopf Josegonzalez / Homebrew-php

Erledigt! Jetzt sollten wir Xdebug bequem auf einem Mac installieren.


Installieren Sie Xdebug

Zurück in Ihrer Terminalanwendung führen Sie bitte Folgendes aus:

Brühen Sie Installieren von php54-xdebug

Wenn Sie PHP 5.3 verwenden, ersetzen Sie einfach die "4" durch eine "3";)

Die Installation wird einige Zeit dauern. Danach sehen Sie ein kleines Bier-Symbol und einige weitere Anweisungen, die Sie ignorieren können.

Was ist also passiert? Homebrew hat alle Dateien einschließlich ihrer Abhängigkeiten heruntergeladen und für Sie erstellt. Wie ich Ihnen bereits gesagt habe, kann es schwierig sein, sich auf einem Mac zu kompilieren. Am Ende haben wir einen frisch zusammengestellt xdebug.so befindet sich /usr/local/Cellar/php54-xdebug/2.2.1/.

Achtung: Bitte beachten Sie, dass Homebrew während des Vorgangs PHP 5.4 auf Ihrem System installiert. Dies sollte nichts beeinflussen, da es auf Ihrem System nicht aktiviert ist.

Um Xdebug endgültig zu installieren, müssen wir nur noch einige Schritte ausführen.

Ändere die Richtung (CD) zum Erweiterungsordner von MAMP:

cd /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525

Sie können den Pfad erneut überprüfen, indem Sie die letzte Zeile von anzeigen /Applications/MAMP/bin/php/php5.4.4/conf/php.ini, denn hier gehen wir hin.

Sichern Sie das vorhandene xdebug.so nur für den Fall:

mv xdebug.so xdebug.so.bak

Dann kopiere dein Homebrew Xdebug Build:

cp /usr/local/Cellar/php54-xdebug/2.2.1/xdebug.so /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/

Wenn Sie eine Kopie erzwingen möchten (cp) Befehl zum Überschreiben vorhandener Dateien cp -X Quellziel.

Zu guter Letzt müssen wir das ändern php.ini Datei, um die Xdebug-Erweiterungsdatei zu laden. Öffnen /Applications/MAMP/bin/php/php5.4.4/conf/php.ini Gehen Sie mit einem Texteditor Ihrer Wahl ganz nach unten und entfernen Sie die letzte Zeile durch Entfernen des Semikolons an der Spitze. Nicht schließen die datei gerade noch.

Starten Sie MAMP jetzt erneut, und fahren Sie mit fort http: //localhost/MAMP/phpinfo.php. Wenn alles gut gegangen ist, sollten Sie dies in der Ausgabe finden:


Wenn es tat nicht Arbeit, stellen Sie bitte sicher, dass Sie wirklich über das kopiert haben xdebug.so und den richtigen Weg in deiner php.ini Datei.


Starten Sie das Debuggen

Bevor wir mit dem Debuggen beginnen können, müssen wir Xdebug aktivieren. Deshalb hoffe ich, dass Sie Ihre nicht geschlossen haben php.ini, da wir diese Zeile ganz nach dem zend_extension Möglichkeit:

xdebug.remote_enable = Ein

Speichern Sie und schließen Sie Ihre php.ini Datei und starten Sie MAMP neu. Gehe zu http: //localhost/MAMP/phpinfo.php wieder und suchen nach xdebug.remote auf der Website. Ihre Werte sollten genau wie meine aussehen:


Wenn dies nicht der Fall ist, gehen Sie genauso vor, wie Sie es hinzugefügt haben remote_enable = Ein für die anderen Aussagen am Ende Ihres php.ini Datei.

Öffnen Sie jetzt Ihre IDE Ihrer Wahl. Sie können Xdebug mit einer Reihe beliebter Softwarelösungen wie Eclipse, Netbeans, PhpStorm und auch Sublime Text verwenden. Wie ich bereits sagte, werde ich PhpStorm EAP 6 für diese Demo verwenden.

Öffnen Sie in PhpStorm die Anwendungseinstellungen und suchen Sie nach "PHP \ Debug \ DBGp Proxy" auf der linken Seite, wie im Screenshot unten:


Wählen Sie jetzt Ihren persönlichen IDE-Schlüssel. Dies kann eine beliebige alphanumerische Zeichenfolge sein. Ich ziehe es vor, es einfach anzurufen PHPSTORM, aber XDEBUG_IDE oder mein Name wäre auch vollkommen in Ordnung. Es ist wichtig, das einzustellen "Hafen" Wert zu 9000 Als Standard-Xdebug-Konfiguration wird über diesen Port eine Verbindung zur IDE hergestellt.

Tipp: Wenn Sie dies anpassen müssen, fügen Sie hinzu xdebug.remote_port = Portnummer zu deinem php.ini Datei.

Achtung: Andere Komponenten können diesen Wert innerhalb von PhpStorm ändern. Achten Sie daher darauf, wenn etwas fehlschlägt.

Klicken Sie als Nächstes auf die rote kleine Telefontaste mit einem kleinen Fehler in der oberen Symbolleiste. Es sollte grün werden. Dadurch wird PhpStorm auf eingehende Xdebug-Verbindungen überwacht.


Jetzt müssen wir etwas zum Debuggen erstellen. Erstellen Sie eine neue PHP-Datei, rufen Sie sie wie gewünscht an und fügen Sie den folgenden Code ein:

 

Jetzt ist dieser Code standardmäßig falsch, aber wir werden ihn im nächsten Abschnitt gleich beheben.

Stellen Sie sicher, dass alles gespeichert ist, und öffnen Sie Ihren Browser mit dem gerade erstellten Skript. Ich werde Google Chrome für diese Demo verwenden, aber jeder Browser kann dies tun.

Nehmen wir uns einen Moment Zeit, um zu verstehen, wie der Debugging-Prozess initialisiert wird. Unser aktueller Status ist: Xdebug als Zend-Erweiterung aktiviert Port 9000 damit ein Cookie während einer Anfrage angezeigt wird. Dieser Cookie enthält einen IDE-Schlüssel, der dem gleichen entspricht, den wir in unserer IDE eingerichtet haben. Wenn Xdebug sieht, dass das Cookie die Anfrage trägt, versucht es, eine Verbindung zu einem Proxy, unserer IDE, herzustellen.

Wie bekommen wir diesen Cookie an Ort und Stelle? PHP's Setcookie? Obwohl es mehrere Möglichkeiten gibt, auch wenn dies ohne Cookies funktioniert, werden wir eine kleine Browsererweiterung als Helfer verwenden.

Installieren Sie den "Xdebug-Helfer" "in Ihrem Google Chrome-Browser oder suchen Sie nach Erweiterungen, die dies für den von Ihnen verwendeten Browser tun.

Nachdem Sie die Erweiterung installiert haben, klicken Sie mit der rechten Maustaste auf den kleinen Fehler in Ihrer Adressleiste und gehen Sie zu den Optionen. Konfigurieren Sie den Wert für den IDE-Schlüssel so, dass er mit dem von Ihnen in der IDE ausgewählten Schlüssel übereinstimmt:


Klicken Sie nach der Konfiguration auf den Fehler und wählen Sie aus "Debuggen" von der Liste. Der Fehler sollte grün werden:


Gehen Sie jetzt zurück zu PhpStorm oder Ihrer IDE Ihrer Wahl und legen Sie einen "Haltepunkt" fest. Haltepunkte sind wie Markierungen in einer Zeile, die den Debugger anweisen, die Ausführung des Skripts an diesem Haltepunkt anzuhalten.

In PhpStorm können Sie einfach Haltepunkte hinzufügen, indem Sie auf das Leerzeichen neben den Zeilennummern auf der linken Seite klicken:


Versuche einfach zu klicken, wo der rote Punkt auf dem Screenshot erscheint. Sie haben dann einen Haltepunkt gesetzt, an dem Ihr Skript anhalten soll.

Hinweis: Sie können mehrere Haltepunkte in beliebig vielen Dateien haben.

Jetzt sind wir fertig. Gehen Sie zurück zu Ihrem Browser, stellen Sie sicher, dass der Fehler grün ist, und laden Sie die Seite einfach neu, um das Cookie mit der nächsten Anfrage zu senden.

Tipp: Wenn Sie ein Cookie setzen, steht es für die nächste Anfrage zur Verfügung.

Wenn alles nach Plan verläuft, sollte dieses Fenster in PhpStorm angezeigt werden, um Sie über eine eingehende Debug-Verbindung zu informieren:


Ist das Fenster nicht für Sie aufgeschaltet? Lassen Sie uns einige Fehler beheben und wiederholen Sie, was eingestellt werden muss, damit dies gelingt:

  1. Sie sollten Xdebug-Info in finden phpinfo ()Ausgabe. Wenn nicht, hol dir das xdebug.so Datei am richtigen Ort und richten Sie Ihre php.ini Datei.
  2. Legen Sie die Einstellungen für PhpStorm DBGp auf Ihren IDE-Schlüssel fest, z. "PHPSTORM" und Port "9000".
  3. Lassen Sie PhpStorm mithilfe des roten Telefonsymbols auf eingehende Debug-Verbindungen achten, das dann grün wird.
  4. Setzen Sie einen Haltepunkt in Ihrem Code oder wählen Sie "Run \ Break in der ersten Zeile in PHP-Skripten" unabhängig von Haltepunkten sein. Beachten Sie, dass dies nicht für die praktische Verwendung geeignet ist.
  5. Rufen Sie eine Browsererweiterung ab, um das Xdebug-Cookie festzulegen.
  6. Stellen Sie sicher, dass die Browsererweiterung denselben IDE-Schlüssel enthält, den Sie in Ihrer IDE ausgewählt haben.
  7. Laden Sie die Seite neu und PhpStorm sollte die Verbindung erhalten.

Wenn Sie den Dialog auf dem vorherigen Bild sehen, akzeptieren Sie ihn bitte. Dies bringt Sie in den Debug-Modus wie folgt:


Sie können sehen, dass der Debugger die Ausführung des Skripts an Ihrem Haltepunkt angehalten hat und die Zeile blau hervorgehoben hat. PHP wartet nun auf Xdebug, das von nun an von Ihren eigenen Händen gesteuert wird.

Unser Hauptarbeitsbereich wird der untere Abschnitt der IDE sein, der bereits einige Informationen zum laufenden Skript (den Superglobalen) enthält..


Und würdest du dir das ansehen? Es gibt den Cookie, den wir gerade gesetzt haben, um die Debugging-Sitzung zu starten. Sie können jetzt durch die Superglobalen klicken und deren Werte in diesem Moment überprüfen. PHP wartet, es gibt kein Zeitlimit, zumindest nicht die Standardeinstellung von 30 Sekunden.

Auf der linken Seite sehen Sie einige Knöpfe. Vorerst nur "Abspielen" und "Halt" sind für uns interessant. Die grüne Wiedergabetaste setzt das Skript fort. Wenn im Code ein anderer Haltepunkt vorhanden ist, wird das Skript fortgesetzt, bis es den Haltepunkt erreicht und erneut angehalten wird.

Die rote Stopp-Taste bricht das Skript ab. Genau wie bei PHP Ausfahrt oder sterben würdest du.


Die wirklich interessanten kommen jetzt im oberen Teil des Debug-Fensters:


Lass uns sie kurz überprüfen:

  1. Schritt über: Dies bedeutet einen Schritt voraus.
  2. Hineinsteigen: Wenn die blaue Linie beispielsweise einen Funktionsaufruf hervorhebt, können Sie mit dieser Schaltfläche die Erkenntnisse der Funktion durchgehen.
  3. Schritt raus: Wenn Sie in eine Funktion getreten sind und vor dem Ende aussteigen möchten, treten Sie einfach heraus.
  4. Führen Sie den Cursor aus: Nehmen wir an, Ihre Datei ist zum Beispiel 100 Zeilen lang und Ihr Haltepunkt wurde in Zeile 2 gesetzt, um etwas zu prüfen. Jetzt möchten Sie schnell zu der Stelle laufen, auf die Sie gerade mit dem Cursor geklickt haben - diese Schaltfläche ist für Sie. Sie können klicken "Schritt über" n mal auch;)

Machen Sie sich keine Sorgen, da Sie Xdebug verwenden, werden Sie sich schnell an die Tastaturkürzel anpassen.


Tatsächlich Debuggen einiger Beispielcodes

Ich habe Ihnen bereits gesagt, dass der Code, den Sie kopieren / einfügen, falsch ist, also müssen Sie ihn debuggen. Beginnen Sie, den Code Schritt für Schritt zu überschreiten.

Beachten Sie, dass die blaue Linie nur auf Zeilen hält, die tatsächlich einen Befehl enthalten. Leerzeichen und Kommentare werden übersprungen.

Sobald Sie den Funktionsaufruf zu erreichen lade Daten, Bitte Steige nicht hinein, Geh einfach rüber und halt auf der ob Aussage.


Sie sehen zwei neue Variablen im "Variablen" Panel am unteren Rand des Bildschirms. Nun, warum? $ data Variable Rückgabe falsch? Es scheint, als hätte das Skript seine Arbeit erledigt. Lass uns einen Blick darauf werfen. Gehen Sie zurück zu Zeile sieben, um in den Funktionsaufruf -> bam zu gelangen! Wir erhalten eine Nachricht, dass wir nicht "zurücktreten" können. Damit Ihr Debugger wieder in Zeile sieben angezeigt wird, müssen Sie diese Sitzung beenden und die Seite erneut im Browser laden. Tun Sie dies und treten Sie diesmal in den Funktionsaufruf ein.

Stoppen Sie auf der Rückkehr Aussage innerhalb der lade Daten Funktion und sehen, was passiert ist:


Das $ phpData Array ist leer. Das Rückkehr Die Anweisung verwendet einen ternären Operator, um zu ermitteln, was zurückgegeben werden soll. Und es wird wiederkommen falsch für ein leeres Array.

Korrigieren Sie die Zeile mit den folgenden Worten:

return $ phpData;

Wie json_decode wird entweder die Daten zurückgeben oder Null bei einem Ausfall. Beenden Sie nun die Debug-Sitzung, laden Sie Ihren Browser neu und gehen Sie diesmal über den Funktionsaufruf.


Nun scheint es, als hätten wir immer noch ein Problem, wenn wir in den Zustand eintreten. Bitte korrigieren Sie die zu verwendende Bedingung ist Null() um herauszufinden, was los ist:

if (is_null ($ data)) die ('Daten konnten nicht geladen werden'); 

Nun liegt es an Ihnen, etwas zu versuchen. Ich würde vorschlagen, das Skript auf die ursprüngliche Falschversion zurückzusetzen und es mit zu debuggen Echound vergleichen Sie dann, wie sich das anfühlt im Vergleich zu Xdebug.


Fazit

In diesem Artikel sollten Sie viel neues Wissen erworben haben. Zögern Sie nicht, es noch einmal zu lesen und einem Freund zu helfen, Xdebug einzurichten - nichts Besseres!

Möglicherweise möchten Sie Ihr übliches Debug-Verhalten ersetzen, indem Sie stattdessen Xdebug verwenden. Besonders bei größeren, objektorientierten Projekten, da sie viel einfacher zu debuggen sind und sogar den Fluss aufholen, wenn Sie nicht sofort etwas bekommen.

Beachten Sie, dass dies nur die Spitze des Eisbergs ist. Xdebug bietet viel mehr Leistung, die ebenfalls erforscht werden muss.

Bitte zögern Sie nicht, Fragen in den Kommentaren zu stellen und lassen Sie mich wissen, was Sie denken.