Sidebar
ein-/ausblenden

PHP Debugging und Profiling leicht gemacht

Plugin für WordPress SEO

Anzeige

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.

9 Kommentare und 2 Trackbacks zu „PHP Debugging und Profiling leicht gemacht“

  1. 1
    Kommentar von Funbug

    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. 2
    Kommentar von Frank Bültge

    Herzlichen Dank für diesen Tipp, super.

  3. 3
    Kommentar von eskwebdesign

    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?

  4. 4
    Kommentar von Frank Bültge

    Gern, ja geht ohne Probleme in meinem XAMPP.

  5. 5
    Pingback von WordCamp08, der Tag danach | bueltge.de [by:ltge.de]
  6. 6
    Kommentar von Dennis

    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)?

  7. 7
    Kommentar von Frank Bültge

    @Dennis: Die Darstellung erzeugt xDebug ohne Veränderungen. Eventuell mal im Projekt fragen.

  8. 8
    Kommentar von Dennis

    Danke für die schnelle Antwort, dann werd ich dort mal nachfragen.

  9. 9
    Pingback von Effizienz bei der Webentwicklung - bueltge.de [by:ltge.de]
  10. 10
    Kommentar von Helge

    Hallo, ich habe ein problem seid dem Einbau von xdebug startr mein apache zwar noch aber er meckert das er die php5.dll nicht finden kann!
    Was kann man da machen?
    Habs sonst alles so gemacht wie es hier beschrieben ist!

    danke schonmal!

    grüße Hele

  11. 11
    Kommentar von Mod_tester

    um unter Linux eine formatierte Ausgabe zubekommen muss man noch html_errors auf on setzen

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.