PHP Debugger für Eclipse
Wie bereits vor längerem vorgestellt, entwickeln wir unsere PHP Applikationen in Eclipse. Je größer die Applikation wird, umso wichtiger ist die Möglichkeit gute Debug Funktionen zu haben. Eclipse hat ja von Haus aus eine Debug Umgebung mit Haltepunkten (Breakpoints), Variablen Explorer und die Möglichkeit in Einzelschritten im Code voranzuschalten.
Diese Debug Features kann man sich auch für PHP zu nutze machen und so auch in Eclipse PHP Dateien debuggen. Leider ist das nicht ganz so einfach, man muss schon etwas Zeit und Geduld investieren.
Wir gehen im folgenden davon aus, dass lokal Windows mit einem Apache Server mit PHP 5 (bei uns ein XAMPP) läuft und Eclipse mit PHPEclipse installiert ist.
Noch eine Warnung, in Produktivsystemen, oder öffentlich erreichbaren Webservern hat das Debugging und die damit verbunden php.ini Einstellungen nichts verloren!
Schritt 1: Den PHP Debugger DBG installieren
Als erstes braucht man die dbg Extension für PHP. Die findet man auf http://dd.cron.ru/dbg/downloads.php im Paket dbg modules (zur Zeit aktuell DBG-2.15.5-dbg-modules).
Nach dem Entpacken findet man in dem Paket einen Ordner x86 und darin mehrere Dateien der Form php_dbg.dll-.x.x.x Dabei stehen die x für die PHP Version. Bei uns läuft PHP 5.2, also brauchen wir die Datei php_dbg.dll-.5.2.x welche in den extension Ordner von PHP kopiert werden muss. Das ist in XAMPP der Ordner xampp/php/ext davor muss man die Datei noch umbenennen nach php_dbg.dll also einfach die Versionsnummern aus dem Dateinamen entfernen.
Schritt 2: Den PHP Debugger DBG konfigurieren
Als nächstes muss die php.ini angepasst werden. Diese liegt in XAMPP im Ordner xampp/apache/bin/php.ini
Folgende Zeilen müssen eingefügt werden. Wir haben sie einfach ans Ende gesetzt.
[Debugger] extension=php_dbg.dll debugger.enabled=On debugger.profiler_enabled=On debugger.timeout_seconds=600 debugger.JIT_enabled=Off debugger.JIT_host=clienthost debugger.JIT_clientport=7869
Da DBG im Konflikt mit einigen Zend Erweiterungen steht muss in der php.ini alles was unter [Zend] steht deaktiviert werden (Strichpunkt davor setzen). Bei uns sieht das dann so aus:
[Zend] ;zend_extension_ts = "G:idexamppphpzendOptimizerlibZendExtensionManager.dll" ;zend_extension_manager.optimizer_ts = "G:idexamppphpzendOptimizerlibOptimizer" ;zend_optimizer.enable_loader = 0 ;zend_optimizer.optimization_level=15 ;zend_optimizer.license_path = ; Local Variables: ; tab-width: 4 ; End:
Möchte man, dass der Debugger nach jedem Haltepunkt die Ausgabe im Browser aktualisiert, muss die Option implicit_flush=On gesetzt werden. Diese steht schon in der php.ini und ist meistens auf Off gesetzt, da sie enorme Performance Einbußen mit sich bringt und nur zum debuggen eingeschaltet werden sollte, auf keinen Fall in Produktivsystemen..
Schritt 3: testen, ob der PHP Debugger DBG korrekt installiert und konfiguriert ist
Jetzt ist es an der Zeit den Apache Server zu starten, bzw. neu zu starten. Nun einfach folgenden Code in eine leere Datei kopieren, abspeichern und im Browser aufrufen.
Dort müsste es eine Rubrik dbg geben, mit den oben in der php.ini gesetzten Werten, sowie folgender Text (vgl. auch Bild) zu finden sein “with DBG v2.15.5, (C) 2000,2007, by Dmitri Dmitrienko”.
Schritt 4: Ein paar System Einstellungen anpassen
Bevor es losgehen kann, müssen jetzt noch einige Einstellungen gesetzt werden, damit der PHP Debugger DBG auch in Eclipse funktionieren kann. Dazu muss als erstes die Firewall angepasst werden. Der Port 10001 (TCP) muss freigegeben werden. Eventuell könnte auch Port 7869 Probleme machen… Einfach mal beobachten ob auf einem der beiden Ports etwas blockiert wird, was zum PHP Debugger oder Eclipse (java) gehören könnte…
Weiter gehts im Eclipse selber. Um zu verhindern, dass der Debugger im Eclipse internen Browser ständig die Seite ein einer Schleife lädt muss leider unter Window=>Preferences=>PHPeclipse=>Browser=>Preview=>”Refresh PHP browser view when opening editor” deaktiviert werden.
Damit das Script auch interpretiert werden kann, muss ein PHP Interpreter angegeben werden. Unter Window=>Preferences=>PHPeclipse=>PHP=>”Installed Interpreters” den Pfad zur php-win.exe hinzufügen und diesen aktivieren (Häkchen setzen).
So, das dürfte es jetzt erst mal gewesen sein…
Schritt 5: ein Eclipse Debug Script für PHP anlegen
Nun muss Eclipse noch angewiesen werden, was es zu debuggen gibt. Da geht man mehr oder weniger so vor, wie beim debuggen einer Java Application. Unter Run=>Debug klickt man doppelt auf “PHP DBG Script” es öffnet sich ein leeres Script, welches es anzupassen gilt.Zunächst ändert man “New_Configuration” in einen aussagegräftigen Namen um. Wir nennen es mal “iEngine Debug”. Unter “Project” wählt man dann das zu debuggende Eclipse PHP Projekt aus und unter “file” die zu debuggende Datei. Der nächste Reiter Arguments bleibt unverändert.
Unter PHP Environment sollte man den Interpreter sehen und einen weiteren Unterreiter namens Remote Debugger. Hier wirds jetzt etwas seltsam. Zunächst aktiviert man Remote Debug und Cross Plattform debugging, sowie Open with DBGSession URL in internal Browser.
Der Remote Sourcepfad müsste schon auf dem absoluten Pfad zur Datei, welche gedebugged werden soll stehen. Wenn nicht, ist dies anzugeben. Bei uns wäre das G:\IDE\xampp\htdocs\development\iEngine (da die zu debuggende Datei index.php dort liegt)
Jetzt noch das Mapping. Unter Mapped Path klickt man auf Add und trägt den Pfad von eben sowohl als Local Path als auch als Remote Path ein. Jetzt steht also sozusagen 3 mal der gleiche Pfad da. Es funktioniert wirklich nur so. Lässt man die Pfade weg tut sich nichts.
Hierzu auch kurz ein Bild:
![]()
Den nächsten Reiter, der ebenfalls Environment heißt kann man wieder auslassen. Unter dem letzten Reiter Common setze ich nun noch unter Display in favorites menu einen Haken bei Debug und stelle das Consolen Encoding auf UTF-8 (warum siehe XHTML Entities vs. Zeichensatz)
Ein klick auf Apply speichert das Debug Script ab. Theoretisch kann man nun auf Debug klicken und den ganzen Vorgang einmal starten. Egal ob bereits Breakpoints gesetzt sind oder nicht, das Ergebnis ist meistens das, dass einfach nichts weiter passiert. Wenn dem so ist einfach mal Eclipse und den Apache neu starten. Dann einfach einen Breakpoint setzen. (alle bisherigen vorher löschen) Und nun wechselt man in die Debug Ansicht von Eclipse (das ist die gleiche wie für Java…) und klickt im Eclipse Menü auf Debug auf das eben erstelle Debug Script. Mit etwas Glück steht das Script nun auf dem Haltepunkt, auf dem Eclipse Tab “Variables” stehen alle Laufzeit variablen der PHP Umgebung und im internal PHP Browser von PHPEclipse steht im Dateipfad ein Zusatz der Art http://localhost/development/iEngine/index.php?DBGSESSID=1@clienthost:10001 der Parameter DBGSESSID=1@clienthost:10001 ist dabei ein Paramerter für den PHP Debugger.e
Nun stehen alle Möglichkeiten offen, Breakpoints können gesetzt und geändert werden, Variablen können angesehen werden und ist das Script auf einem Haltepunkt angelangt, kann mit den Einzelschrittanweisungen der Code Zeile für Zeile, Klick für Klick ausgeführt werden.
Das Ganze kann dann so aussehen:
![]()
Hier noch eine kleine Einführung (an einem Java Beispiel) wie der Eclipse Debugger zu benutzen ist.
Schritt 6 mögliche Fehler und Probleme mit dem Eclipse DBG Debugger für PHP
Es hat nicht umsonst einige Zeit gedauert, bis bei uns der PHP Debugger gescheit läuft und wir hatten auch schon daran gezweifelt jemals in Eclipse PHP Scripte Debuggen zu können. Deswegen hier eine Auflistung möglicher Fehler die auftreten könnten:
Beim starten des Debuggers kann eine Fehlermeldung auftreten, dass die ein oder andere dll Datei fehlen würde. Bei uns waren dies libdb43.dll, intl3_svn.dll, libaprutil.dll, libapriconv.dll und libapr.dll. Diese befinden sich bei xampp im Verzeichnis xampp/apache/bin/ und müssen in den Ordner xampp/php kopiert werden.
Nach dem Starten des Debuggers tut sich manchmal einfach nichts. Das kommt hin und wieder vor. Da reicht meistens im PHP Browser F5 zu drücken, bzw auf die Url zu klicken und Eingabe zu drücken. Dann springt der Debugger an und läuft zum ersten Breakpoint. So wie wir das verstehen braucht der Debugger eine Clientanfrage damit er was senden kann und Eclipse startet diese Anfrage über den internen PHP Browser, welcher einfach neu angestoßen werden muss.
Der Debugger macht nichts, bzw beim Klicken auf resume hält das Script nicht am nächsten Breakpoint, terminiert aber auch nicht. Das kommt gelegentlich mal vor, wartet man einige Zeit, manchmal über eine Minute, gehts auf einmal weiter. Was da genau das Problem ist konnten wir bisher nicht herausfinden Tatsache ist, dass oft einfach mal kurz ein bis zwei Minuten gewartet werden muss, bis es weiter geht. Kann man nicht mehr auf resume klicken, aber das Script ist noch gar nicht beendet, muss man im Trace (Thread) auf einen Punkt weiter oben in der Ebene klicken, dann geht der resume Button wieder.
Der PHP Browser gitbt nur noch aus:
DBG
Failed to start debug session
reason:
failed to establish connection to client host on 127.0.0.1:10001
Das liegt an der Url welche noch vom Debugger im PHP Browser steht. Aus http://localhost/development/iEngine/index.php?DBGSESSID=1@clienthost:10001 muss man http://localhost/development/iEngine/index.php?DBGSESSID=0 machen, damit ist das Debugging abgeschaltet und alles läuft normal.
Bei weiteren Problemem einfach mal die Firewall prüfen, sowie die Pfadangaben…
Wir hoffen, das Ganze hilft dem ein oder anderen weiter und würden uns über weitere mögliche Probleme und deren eventuelle Lösungen freuen.
Weiterführende Literatur, also Bücher zu Eclipse:
Wenn dir dieser Beitrag gefällt, lade den Autor doch mal zu einem Drink ein ;-)Tags: debug, eclipse, entwicklungsumgebung, IDE, PHP, webdesign

[...] es bereits einige. Unsere Favoriten sind da zum einen Eclipse mit entsprechenden PHP Plugins (und PHP Debugger), als auch das Zend Studio Vor kurzem (September 2007) hat nun Zend eine erste Version der Eclipse [...]
[...] nur möglich Projekte in Java zu verwalten sondern je nach Plugin jede beliebige Sprache. Einen Debugger sollte man sich ebenfalls direkt mit ins Boot holen, der das debuggen vereinfacht. Kommen wir nun [...]
Danke für euren super Beitrag. Er ist echt hilfreich. Programmieren ohne Debugger ist ansonsten echt sch*.
Ich hätte da mal eine Frage. Der Debugger funktioniert nach dieser Anleitung erstmal. Zumindest kann ich Breakpoints setzen und die werden auch berücksichtigt.
Habe ich allerdings ein Formular und schicke damit Daten an ein Skript meldet der Browser nur:
Failed to start debug session
reason:
failed to establish connection to client host on 127.0.0.1:10001
Ist irgendwie blöd
Muss ich, um auch Formulare (und vor allem die Skripte die die Daten daraus verarbeiten) zu Debuggen noch irgendwas beachten?
Ich komme einfach nicht weiter. Bei mir tut sich gar nichts. Es steht im Debug Fenster lediglich
PHP Debugger at localhost:10001
Thread [main]
Was bedeuted das? Ich habe bereits alles neu gestartet von Apache Server bis Easy Eclipse, hab die dll’s wie beschrieben reingespielt. Lediglich, wenn ich in meinem Script einen manuellen Debug Break einfüge, dann stoppt das Script.
Echt cooles Tutorial hat auf anhieb Funktioniert!!!!
Der Debugger läuft jetzt muss ich mal testen
Super Artikel.
Hat mir sehr geholfen nach Tagen der Ratlosigkeit.
Ich hatte anfänglich auch das Problem wie Kai und Debby.
“Failed to start debug session
reason:
failed to establish connection to client host on 127.0.0.1:10001″
Bei mir war es die Pfadeinstellung bei:
Window=>Preferences=>PHPeclipse=>Projekt Defaults=>Projekt URI
http://localhost
muss bezogen auf den Blog so aussehen
http://localhost/development/iEngine
Habe die Anleitung Schritt für Schritt befolgt, aber irgendwie scheint eclipse nichts zu merken. Wollte wie beschrieben den Debugger über Run starten aber dort ist nicht ausser dem Junit und Java Debug Zeugs zu sehen.
Nach stundenlangen Versuchen anhand Beispiele anderer Seiten bin ich nun auf diese Anleitung gestossen. Und, DANKE, es funktioniert nun. Ein Traum!
Ich verwende EasyEclipse 1.2.2.2 für Windows und dbg 2.15.5. Ich habe alles nach der Anleitung installiert. Der Debugger startet auch einwandfrei. Nur, wenn ich im Code einen Breakpoint setze reagiert der Debugger einfach nicht. Kann mir jemand helfen?
Hatte Eclipse vorher noch nie verwendet und Erfahrung im Debuggen nur mit VB.NET gehabt. Sehr gute Anleitung, aber es sollte der Tipp von vin noch unbedingt rein, danach lief alles einwandfrei. Habe Eclipse sozusagen “from scratch” installiert.
Habe die Installtion wie beschrieben durchgeführt!
Wenn ich das lauffaehige Script index.php mit Debug starte,
habe die Fehlermeldung
>Could not open input file: index.php< in der Console stehen
Wer kann mir helfen?
Hey,
Ich wollt mich mal bedanken. Nach stundenlanger Konfiguration und Pakete neu bauen funktioniert es nun auch bei mir. Nutze Linux und noch ne kleine Sache. Die Pfad angaben beim mapping sind nicht immer gleich. Ich hab mein apache root in /var/www/localhost/htdocs/kedaiv mein Projekt leigt aber im Home. Dort dann beim Remote Sourcepath den wirklichen Pfad eingeben, nicht die URL. Also: /var/www/localhost/htdocs.
Bei mapped path dann /home/[nutzer]/usw /var/www/localhost/htdocs und dann macht er es auch. Danke nochmal!
wow, super tutorial, danke
wow, super toturial, danke
Lieber Stephan und Daniel,
euer Artikel ist gut, aber wie legt man ein Projekt an. Ich bin in Schritt 5,
aber unter ‘File selection’ sind keine Dateien eingetragen.
Wolfgang