PHP Debugging und Profiling leicht gemacht

Die Entwicklung von Scripten mittels PHP bringt immer wieder Schwierigkeiten im Bereich der Fehlersuche. Editoren bzw. Entwicklungsumgebungen, die eine Debuggingfunktion mitbringen, sind teuer oder nicht unbedingt leicht zu konfigurieren. Seite geraumer Zeit arbeite ich dabei mit Xdebug, eine Erweiterung für PHP, mit der das Debuggen einfach und schnell von der Hand geht. Damit die Konfiguration immer wieder zur Hand ist und schnell und logisch nachvollziehbar ist, erkläre ich einigen Schritten, wie man zu einer Entwicklungsumgebung mittels Xdebug kommt.

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 9 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

PHP HowTo

Die Entwicklung von Scripten mittels PHP bringt immer wieder Schwierigkeiten im Bereich der Fehlersuche. Editoren bzw. Entwicklungsumgebungen, die eine Debuggingfunktion mitbringen, sind teuer oder nicht unbedingt leicht zu konfigurieren. Seite geraumer Zeit arbeite ich dabei mit Xdebug, eine Erweiterung für PHP, mit der das Debuggen einfach und schnell von der Hand geht.

Damit die Konfiguration immer wieder zur Hand ist und schnell und logisch nachvollziehbar ist, erkläre ich einigen Schritten, wie man zu einer Entwicklungsumgebung mittels Xdebug kommt. Als Voraussetzung dient dabei die Distribution von Apache, MySQL, PHP und Perl - XAMPP, die beispielhaft unter dem Pfad D:\xampp\ installiert ist.

Im ersten Schritt muss selbstverständlich ein Server laufen, dazu die Empfehlung für einfaches und unkompliziertes Aufsetzen eines Apache - XAMPP. Sollte es Schwierigkeiten geben, es gibt eine Reihe von guten Tutorials zum Aufsetzen im Netz.

Nun soll aber die Umgebung um Xdebug erweitert werden. Dazu muss zuerst die aktuelle PHP-Version deines Apache festgestellt werden. Dazu steht steht im XAMPP-Paket schon eine Datei bereit, die den nötigen Syntax phpinfo(); enthält und die Informationen ausgibt. Rufe im Browser die Adresse http://localhost/xampp/phpinfo.php auf. Nun sollte die laufende PHP-Version im Browser ausgeben werden, inklusive einiger weiterer Informationen.

Mit Hilfe dieser Information können wir nun die entsprechende Version von Xdebug holen. Dazu die Downloadseite besuchen und die entsprechende Datei downloaden.

Die Datei xdebug.dll kopieren wir nun in D:\xampp\php\ext\, Laufwerkpfad an eure lokale XAMPP-Installation anpassen.

Im weiteren muss die Datei php.ini bearbeitet werden, zu finden in D:\xampp\apache\bin\. Dazu die Datei in eurem Editor öffnen und folgenden Zeilen hinzufügen.

Als erstes muss der Pfad zur Datei definiert werden.
zend_extension_ts="D:\xampp\php\ext\php_xdebug.dll"

Achtet darauf, dass es keine andere Definition für das Merkmal zend_extension_ts gibt. Denn sonst wird der Apache nicht gestartet werden. Die Zeilen können prinzipiell überall in der Datei stehen, ich lege Erweiterungen immer an das Ende um die Übersicht zu waren.

Die folgenden Parameter dienen der Konfiguration von Xdebug. Ein ; dient zum Auskommentieren von Zeilen oder Kommentaren.


[xdebug]
xdebug.auto_trace = 1
xdebug.collect_includes = 1
xdebug.collect_params = 1
xdebug.collect_return = 1
xdebug.default_enable = 1
xdebug.extended_info = 1
xdebug.show_local_vars = 0
xdebug.show_mem_delta = 1
xdebug.trace_format = 1
xdebug.trace_options = 0
xdebug.trace_output_dir ="D:\xampp\tmp"

; Remote
xdebug.remote_enable=1
xdebug.remote_mode="req"
xdebug.remote_host=127.0.0.1
xdebug.remote_port=17869
xdebug.idekey=

; Mode 1
xdebug.remote_handler="gdb"
xdebug.auto_profile = 1
xdebug.auto_profile_mode = 2
xdebug.output_dir = "D:\xampp\tmp"

; Mode 2
xdebug.remote_handler="DBGp"
; Stop profiling process
;xdebug.profiler_enable = 0
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "D:\xampp\tmp"
xdebug.profiler_output_name = "debug.out"

xdebug.dump.SERVER = REMOTE_ADDR,REQUEST_METHOD

Wird das Merkmal xdebug.profiler_enable auf 0 gesetzt, dann ist das Profiling deaktiviert. Die Datei, die beim Profiling entsteht kann schnell recht groß werden, so dass ein Profiling nicht immer gewünscht ist. Um Xdebug zu nutzen, muss das Merkmal den Wert 1 bekommen.

Sollte euer Apache im Vorfeld schon gelaufen sein, so muss er nun neu gestartet werden. Um die Installation von Xdebug zu überprüfen, ruft ihr wieder die phpinfo auf: http://localhost/xampp/phpinfo.php. Dort sollte nach dem ersten Abschnitt die Information zu Version von Xdebug stehen.

Xdebug phpinfo

Auf Grund der Definition in der php.ini, wird eine Datei in D:\xampp\tmp erzeugt und mit Inhalt gefüllt - cachegrind.out.*.

Um diesen Inhalt komfortabel und benutzerfreundlich auszulesen und zu nutzen, empfiehlt sich die Verwendung einer weiteren Applikation - WinCacheGrid, allerdings nur für Windows verfügbar.

WinCacheGrid

Mit dieser Software kann die Datei einfach und schnell ausgelesen werden. Ebenso stehen eine Reihe von Optionen zur Verfügung. In den Optionen definiert ihr den „Working Folder” - D:\xampp\tmp und schon steht die erstelle Datei zum Auslesen im unteren Frame des Programms bereit.

Das eigentliche Debugging läuft direkt in der Anwendung. im folgenden Screenshot habe ich eine Variable, welche nicht gesetzt wird und so folgende Anforderungen nicht erfüllt werden. Die Fehlermeldung leitet auf die entsprechende Zeile bzw. Funktion kann untersucht werden.

Xdebug Debuggen

Ein Tipp am Rande

Um die PHP-Datei direkt im Editor auf Syntax-Fehler zu parsen, nutze ich die php.exe in D:\xampp\php\, die als Anwendung in meinen Editor UltraEdit eingebunden habe. Dazu habe lediglich ein neues Werkzeug definiert welches die aktuelle Datei, welche ich bearbeite, parst. Dazu wurde folgender Syntax hinterlegt: D:\xampp\php\php.exe -l %f.
Aber auch dafür gibt es andere Lösungen, zum Beispiel jEdit mit Pluginerweiterung PHPParser.

Mit diesem kleinen aber spektakulärem Einsatz steht eine Umgebung bereit, mit der eine recht umfangreiche Fehleranalyse möglich ist, ohne großen Aufwand und Kosten. Vielleicht hat ja der eine oder andere einen netten Tipp zu Xdebug und PHP -ich freue mich auf Kommentare.

14 Comments

  1. xdebug ist natürlich eine feine Sache, gerade auch weil es über einfaches Debuggen hinaus geht. Aber wenn es schnell gehen muss oder ich nur online debuggen kann und xdebug nicht verfügbar ist, setze ich auf Tulpes Debug Helper. Ein kleines unscheinbares Script, das mir schon lange treue Dienste leistet und vor allem in jedes Script problemlos einzubinden ist.

  2. Danke für das Tutorial.
    Meine PHP-Version ist 5.2.3, XDebug gibts im Moment 5.2.1, denke das ich noch einen Moment warten muss. Oder funktioniert XDebug5.2.1 mit PHP5.2.3?

  3. Hi Frank! Vielen Dank für diesen tollen Tipp. Ich habe die Anweisungen direkt mal in die Tat umgesetzt 🙂 Hat alles gut geklappt, allerdings erscheinen die Fehlermeldungen auf der Website vollkommen unformatiert. Muss ich etwas beachten, um die tabellarische Ausgabe wie im untersten Screenshot zu erreichen (xdebug 2.0.3 unter linux)?

Comments are closed.