xDebug-Phpstorm-TYPO3, Weihnachtskugeln mit Bug

Xdebug 3 mit PhpStorm und TYPO3 zur Fehleranalyse

Mit Xdebug 3 wurde Ende November 2020 eine stark verbesserte Version des beliebten Debugging-Tools für PHP veröffentlicht. Erfahre hier, wie du Xdebug installierst und für dein Web-Projekt in deiner Entwicklungsumgebung anwenden kannst. Als Beispiel-IDE (Integrated Development Environment) nutzen wir PhpStorm und als PHP-Applikation eine TYPO3-Seite.

Warum Xdebug?

Jeder der Mal ein var_dump($myVar); oder ein echo $myVar; im PHP-Code geschrieben hat, kann die Vorteile von Xdebug nutzen. Viele kennen einen schrittweisen Debugger bereits aus dem JavaScript-Kontext.

Man setzt im Quellcode sogenannte Breakpoints. An diesen Stellen unterbricht der Compiler die aktuelle Ausführung des Quellcodes. Der Entwickler sieht, welche Variablen an dieser Stelle zur Verfügung stehen. Hierzu gehören auch sämtliche globale Variablen.

Nun kann der Entwickler den gesamten bisherigen Verlauf einsehen oder schrittweise weiter den Code ausführen. Zudem kann er Variablen manipulieren und schauen, wie das den weiteren Ablauf beeinflusst. Bye Bye var_dump(), hallo Xdebug.

Aber genug Theorie. Wie das Ganze in der Praxis aussieht, kannst du dir in unserem Video anschauen.

Info Icon

Dieses Video wird über eine externe Plattform (YouTube) gehostet. Das Laden bedarf der Zustimmung unserer Datenschutzbestimmungen.

Einstellung vornehmen

Jetzt denkst du bestimmt: „Das will ich auch“. Kein Problem, wir erklären dir noch, wie du Xdebug für deine Entwicklungsumgebung aufsetzen und nutzen kannst.

Xdebug und TYPO3

Im Kontext von TYPO3 bietet Xdebug den Vorteil, dass stets alle verfügbaren Variablen, auch die $GLOBALS, ersichtlich sind. Zudem lässt sich der Ablauf vom TYPO3-Core und Extbase leichter nachvollziehen. Neben TYPO3 kann Xdebug aber auch für jede andere PHP-Applikation genutzt werden.

Ein weiterer Vorteil ist, dass nicht versehentlich Debug-Befehle wie var_dump() veröffentlicht werden. Wem ist es nicht schon einmal passiert, dass er die folgende Zeile mit commited hat.

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($myVar, __FILE__ . ':' . __LINE__);

Xdebug 3

Bisher war ein großes Manko von Xdebug die Performance. Hatte man die PHP-Erweiterung auf dem Server installiert, noch nicht einmal aktiviert, so hat sich das negativ auf die Geschwindigkeit von PHP ausgewirkt. Mit der Version 3 haben es die Entwickler geschafft, diesen Aspekt größtenteils zu beheben.

Grafik zum Vergleich von Xdebug 2 und 3, wobei Xdebug 3 deutlich schneller ist

Quelle: https://php.watch/articles/xdebug2-vs-3-benchmark

Darüber hinaus waren auch die Konfigurationen relativ umständlich nachzuvollziehen. Diese wurden zusammengefasst und vereinfacht. Und Xdebug 3 ist kompatibel zu PHP 8.

Wie du jetzt Xdebug installieren kannst, erfährst du im folgenden Abschnitt.

Installation von Xdebug

Xdebug kann auf allen gängigen Plattformen genutzt werden. Zunächst gilt es die Erweiterung herunterzuladen und zu installieren. Auf einem Ubuntu-Server lautet der Befehl:

sudo apt-get install php-xdebug

Für weitere Plattformen bietet der Installations-Guide von Xdebug eine gute Übersicht.

Nun muss die Erweiterung in der php.ini registriert werden.

zend_extension=/wherever/you/put/it/xdebug

Das grundlegende Setup ist somit erledigt. Jetzt folgen die spezifischen Konfigurationen.

Xdebug konfigurieren

Mit Xdebug 3 wurde, wie bereits erwähnt, die Konfigurationen vereinfacht. Es gibt nun eine Variable xdebug.mode. Diese Variable kann die folgenden Werte enthalten:

  • off – Xdebug ist deaktiviert und funktioniert somit auch nicht. Es wird nahezu kein Overhead produziert.
  • develop – Aktiviert diverse Hilfen bei der Entwicklung. Hierzu zählen u.a. eine informativere var_dump()-Ausgabe und der Stack-Trace, welcher bei Fehlern den bisherigen Ablauf anzeigt.
  • coverage – Für Nutzer von PHP-Unit wird der Codecoverage untersucht, sprich wieviel Code durch Tests abgedeckt ist.
  • debug – Aktiviert den bereits erwähnten schrittweisen Debugger.
  • gcstats – Aktiviert Statistiken über die PHP-Applikation wie Speicherverbrauch und Performance.
  • profile – Kann zur Performance-Analyse in Verbindung mit weiteren Tools genutzt werden.
  • trace – Bietet die Möglichkeit, jeden Funktionsaufruf zu protokollieren. Es werden Variablen und Return-Werte mit aufgezeichnet.

Die Einstellungen werden in der php.ini getroffen. Für uns wichtig ist zunächst nur der Debug-Modus. Verschiedene Modi können kommasepariert kombiniert werden.

Unsere php.ini sieht wie folgt aus.

zend_extension = xdebug.so

xdebug.mode = debug
xdebug.max_nesting_level = 1000
xdebug.discover_client_host = true

Für TYPO3 wird empfohlen, dass der Parameter max_nesting_level von dem Standardwert 256 auf 1000 erhöht wird. Dieser Wert dient dazu zu verhindern, dass unendliche rekursive Funktionsaufrufe erfolgen.

Als zweites setzen wir noch die Variable discover_client_host auf true. Somit ermittelt Xdebug selbständig den aktuellen Host und PhpStorm kann dann entsprechend darauf reagieren.

Alle möglichen Konfigurationen von Xdebug findest du in der offiziellen Dokumentation.

Installation vom Xdebug-Helper im Browser

Um Xdebug bei einem Seitenaufruf zu aktivieren, gibt es für Firefox und Chrome die Erweiterung Xdebug-Helper. Diesen einfach herunterladen und installieren.

Anschließend muss nur noch der entsprechende IDE-Key gesetzt werden. Dazu die Einstellungen des Plug-Ins öffnen und den IDE-Key „PHPSTORM“ setzen.

Kontextmenü bei Rechtsklick der Browser-Erweiterung Xdebug Helper im Google Chrome

Optionen der Browser-Erweiterung Xdebug Helper

Nun kann die Debug-Session eröffnet werden. Dazu einfach auf den Käfer klicken und „Debug“ wählen. Der Käfer leuchtet anschließend grün.

Kontextmenü der Browser-Erweiterung Xdebug Helper im Google Chrome

!Wichtig! Da Xdebug im aktivierten Modus immer noch zu Lasten der Performance geht, solltet ihr wieder auf den Käfer klicken und „Disable“ wählen, wenn ihr mit dem Debuggen fertig seid. Dann läuft die Seite wieder schneller.

Kontextmenü der Browser-Erweiterung Xdebug Helper im Google Chrome

Jetzt gilt es noch ein paar kleine Anpassungen im PhpStorm vorzunehmen und schon kann es losgehen.

Xdebug im PhpStorm nutzen

PhpStorm vorbereiten

Für das jeweilige Projekt muss nun gesagt werden, unter welchem Host das Projekt läuft.

  1. Dazu unter File > Settings oder “Strg + Alt + S” drücken. Anschließend zu Languages & Frameworks > PHP > Servers
  2. Einen neuen Server anlegen
  3. Einen treffenden Namen geben
  4. Die Domain eintragen
  5. Path Mapping /pathtomyproject/
  6. Speichern

PhpStorm Server Einstellungen

Auf los, Debug

Xdebug lässt sich jetzt an- und ausschalten. Das muss sowohl im PhpStorm, als auch im Browser passieren.

  1. Über das Icon “Start Listening for PHP Debug Connections“ (1) aktivieren wir, dass PhpStorm auf den Port 9000 und für Xdebug 3 auf den Port 9003 hört.Xdebug in PhpStorm aktivieren und Breakpoint setzen
  2. Nun lassen sich Breakpoints (2) setzen, an denen der Compiler anhalten soll.
  3. Die Debug-Session im Browser mit den Xdebug-Helper starten.Kontextmenü der Browser-Erweiterung Xdebug Helper im Google Chrome
  4. Die Seite neu laden.

Sobald nun die Seite im Browser neu geladen wird, stoppt PhpStorm an der Stelle, wo der Breakpoint gesetzt wurde. Also vorausgesetzt, die Stelle wird auch ausgeführt. Stoppt der Compiler an der Stelle, werden alle verfügbaren Variablen angezeigt.

Anzeige der Variablen via Xdebug im PhpStorm

Mit F9 wird die Ausführung des Quellcodes fortgeführt.

Xdebug Session in PhpStorm mit Button zum Fortsetzen

Weitere Funktionen

Sicherlich ist das reine betrachten der Variablen schon ein überzeugendes Argument. Aber der schrittweise Debugger kann noch mehr.

Variablen manipulieren und beobachten

Variablen können jederzeit manipuliert werden. Dazu einfach Rechtsklick auf die Variable und “Set Value“ wählen.

Kontextmenü einer Variable von Xdebug im PhpStorm

Variablenname zum Bearbeiten in PhpStorm mittels Xdebug

Über das Kontextmenü können Variablen kopiert werden. Es lässt sich ermitteln wo die Variable gesetzt wurde.

Über Watchers können Variablen separat betrachtet werden.

Conditions für Breakpoints

Gerade in einer foreach-Schleife kann es lästig sein, wenn der Compiler immer wieder stoppt. Möchte man, dass nur dann angehalten wird, wenn eine Variable einen bestimmt Wert angenommen hat, so setzt man dies einfach als Condition. Dafür auf dem Breakpoint einen Rechtsklick ausführen und die Bedingung setzen.

Rechtsklick auf Breakpoint im PhpStorm

Vor, zurück, zur Seite, ran

Wie schon erwähnt, lässt sich mit Xdebug der gesamte Verlauf nachvollziehen. Alle bisher aufgerufenen Funktionen und deren Parameter lassen sich auslesen. Die Liste der Funktionen sieht man in der linken Leiste. Hier kann jede Funktion angeklickt und die Variablen eingesehen werden.

Stack Trace von Xdebug in PhpStorm

Wenn man wissen möchte, wie es nach dem jetzigen Breakpoint weiter geht, so kann man weitere Breakpoints setzen oder die schrittweise Kompilierung fortsetzen. Dazu dienen die Symbole oberhalb oder man nutzt die entsprechende Tastenkombination.

Buttons in PhpStorm für Xdebug

Wichtig sind die Tasten F7 und F8. Mehr dazu in der Doku von PhpStorm.

Xdebug funktioniert nicht

Falls Xdebug bei dir noch nicht funktioniert, überprüfe die folgenden Punkte:

  • Stimmt die Domain in den Server-Einstellungen im PhpStorm
  • Stimmen die Path Mappings
  • Wurde “Start Listening for PHP Debug Connections“ im PhpStorm aktiviert
  • Ist der Käfer im Browser grün?
  • Wird auf den richtigen Port gehört? Solltet ihr PhpStorm < 2020.3 haben, dann stellt bitte den Debug Port auf 9003 ein. Ab PhpStorm 2020.3 wird zusätzlich immer auf den Port 9003 gehört.
    PhpStorm Debug Einstellungen mit Highlight auf Debug Port
  • Um zu überprüfen, ob überhaupt was funktioniert, könnt ihr einstellen, dass der Debugger anhält, sobald die erste Zeile im PHP-Code erreicht wird. Bei Erfolg, die Checkbox ruhig wieder deaktivieren.
    PhpStorm Debug Einstellung "Break at first line in PHP scripts"

Mehr Debug

Wie zu sehen ist Xdebug 3 relativ simpel aufzusetzen. Wir sind gespannt auf eure Erfahrungen mit dem Tool. Falls ihr Anmerkungen habt, schreibt diese gerne in die Kommentare.

Neben Xdebug kann auch blackfire.io genutzt werden, um den Quellcode zu analysieren und die Performance zu optimieren.

Wir hoffen, unser kleines Tutorial zu Weihnachten hat euch gefallen und wünschen allen eine besinnliche Weihnachtszeit sowie einen guten Rutsch in ein hoffentlich besseres Jahr 2021.

Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.