NetBeans IDE mit Xdebug

Auf der PHP Conference wurde die IDE NetBeans vorgestellt. Diese ist zwar nicht neu, kann aber erst seit kurzem mit PHP umgehen. NetBeans ist in der Lage mit dem Debugger Xdebug zu interagieren. So kann man ein Debugging zur Laufzeit erreichen, wie man es aus anderen Programmiersprachen kennt. Da das oft sehr hilfreich sein kann, hier ein kleines Tutorial dazu:

Installation und Konfiguration

Zunächst wird natürlich NetBeans benötigt. PHP wird ab der Version 6.5 unterstützt welche man hier herunterladen kann. Die Installation ist selbsterklärend, darum gehe ich hier nicht näher darauf ein. Weiterhin wird ein Webserver mit PHP benötigt. Für eine lokale Entwicklungsumgebung empfehle ich XAMPP. In diesem Paket ist so ziemlich alles dabei was man benötigt und die Installation ist einfach. Falls es dennoch zu Problemen kommt gibt es auf der Projekt-Homepage und an vielen anderen Stellen im Netz umfangreiche Tutorials. Sobald der Webserver funktionstüchtig ist kann Xdebug installiert werden. Die genaue Installation ist vom Betriebssystem abhängig, wird aber auf der Projekt-Homepage erklärt. Da ich auf einem Windows-System arbeite gehe hier nur darauf kurz ein. Auf der Projekt-Homepage lädt man sich das aktuelle Xdebug-Modul passend zur PHP-Version herunter. Diese dll-Datei kopiert man in den ext-Ordner innerhalb des PHP-Verzeichnisses. (z.B. C:\Programme\xampp\php\ext). Nun muss das Modul noch geladen und konfiguriert werden. Dazu muss die php.ini etwas angepasst werden. Wird Xampp verwendet findet man die Datei in xampp\apache\bin\php.ini. Zunächst durchsucht man diese Datei nach evtl. vorhandenen xdebug-Zeilen und kommentiert diese ggf. aus, da es sonst später Fehlermeldungen gibt. Xdebug funktioniert (jedenfalls bei mir) nicht zusammen mit dem Zend-Optimizer, deswegen habe ich dieses Modul ebenfalls auskommentiert:

;zend_extension_ts = "C:\Programme\xampp\php\zendOptimizer\lib\ZendExtensionManager.dll"

Stattdessen wird das Xdebug-Modul geladen:

zend_extension_ts = "C:\Programme\xampp\php\ext\php_xdebug-2.0.3-5.2.5.dll"

Am Ende der php.ini wird nun noch die Konfiguration für Xdebug angefügt:

[xdebug]
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir = "C:\Programme\xampp\apache\logs\"
xdebug.auto_trace = 0
xdebug.trace_output_dir = "C:\Programme\xampp\apache\logs\"
xdebug.max_nesting_level = 100

xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.idekey=netbeans-xdebug

Kurz zusammengefasst bewirken diese Einstellungen folgedes: Der Profiler wird nur gestartet wenn er per GET oder POST Parameter gestartet wird. Das Tracing ist deaktiviert. Ausserdem sind die entsprechenden Log-Verzeichnisse angegeben. Die max. Verschachtelung von z.B. Schleifen wird auf 100 begrenzt. Darunter folgt der für NetBeans wichtige Teil. Dort wird das Remote Debugging aktiviert. Xdebug stellt dann eine Schnittstelle bereit die es Clients erlaubt mit PHP-Scripten schon während der Laufzeit zu interagieren. Diese Schnittstelle wird später von NetBeans (auf Port 9000 mit dem Key netbeans-xdebug) angesprochen.

Als letzter Schritt müssen nun noch einige wenige Einstellungen in NetBeans gemacht werden, um die eben eingerichtete Schnittstelle zu Xdebug auch verwenden zu können. Dazu wechselt man in die PHP-Options (Tools > Options > PHP) und stellt den Pfad zu PHP sowie den Xdebug Remote-Port ein.

Danach sollte NetBeans bereit sein PHP-Projekte zu debuggen.

Verwendung

Natürlich bietet der Debugger jede Menge Möglichkeiten und ich werde hier nur ein Beispiel dafür geben, was man mit dem Debugger anstellen kann.

Dazu öffne ich zunächst ein beliebiges Projekt und setze eine Haltepunkt (Breakpoint). Dazu klickt man einfach links neben die entsprechende Zeile in die graue Leiste (1.). Danach starte ich den Debugger mit dem entsprechenden Symbol (2.).

Daraufhin öffnet NetBeans zunächst einen Dialog indem ausgewählt werden kann ob das Projekt Server- oder Clientseitig debugged werden soll. Wählt man hier "Debug Server side PHP" wird das Projekt im Browser aufgerufen. Netbeans wechselt in die Debug-Ansicht und bleibt bei der ersten ausführbaren Zeile Code stehen. (1.) Mit einem Klick auf den Continue-Button (2.) läuft das Script weiter bis zu unserem Haltepunkt.

Dort stoppt das Script erneut (1.) und zeigt verschiedene Informationen. In meinem Beispiel werden alle Variablen und deren Inhalt zu diesem Zeitpunkt aufgeführt. (2.) So kann man beispielsweise echo bzw. var_dump Ausgaben vermeiden.

Nach einem weiteren Klick auf den Continue-Button läuft das Script weiter. Wird nun ein Link im Browser angeklickt beginnt das Spiel von neuem, solange bis die Debug-Session mit einem Klickt auf den Stop-Button beendet wird. An dieser Stelle noch ein Hinweis, sollte euer Browser auch nach dem Beenden der Debug-Session ungewöhnlich langsam sein, hilft das Aufrufen des Projekts mit folgendem GET-Parameter:

http://localhost/projectx/index.php?XDEBUG_SESSION_STOP=netbeans-xdebug

Wie bereits erwähnt ist das bei weitem nicht alles, was man mit NetBeans und Xdebug erreichen kann, aber ich hoffe dieses Tutorial bietet einen kleinen Einblick und verleitet den Ein oder Anderen dazu selbst etwas mit dem Debugger zu spielen.