phpStorm + MAMP: PHP-Debugging unter Mac OS Mountain Lion

Einleitung

In diesem Artikel möchte auf die Möglichkeiten von PHP-Debugging unter OS X Mountain Lion eingehen. Folgende Komponten habe ich zur Zeit im Einsatz:

  • OS X Mountain Lion (10.8.2)
  • MAMP 2.1.1 (Apache Port: 80)
  • phpStorm 5.0.4
  • Chrome 23

Mit dieser Version von MAMP werden 3 PHP-Versionen ausgeliefert (5.2.17, 5.3.14 und 5.4.4). Standardmäßig wird 5.4.4 genutzt. Da für die Konfiguration vom Debugging die php.ini bearbeitet werden muss, ist es gut zu wissen welche Version man gerade verwendet. Dazu kann einfach die PHP-Funktion phpversion genutzt werden. Außerdem wird xDebug in der Version von MAMP schon mitgeliefert und muss lediglich konfiguriert werden. Klingt alles also sehr einfach.

Konfiguration

Standardmäßig scheint Debugging ausgeschaltet zu sein – das Setzen von Breakpoints in phpStorm bleibt jedenfalls ohne jede Funktion und wird komplett ignoriert.

Wenn man die php.ini öffnet muss man dem Eintrag von xDebug suchen. In meinem Fall war dieser ganz am Ende der Datei. Verwirrend für mich ist aktuell, warum es zwei verschiedene php.ini-Dateien unter MAMP gibt. Ich bearbeite einfach beide. Nach dem Speichern wird der Server einmal gestartet und gestoppt.

Die Dateien findet man hier:

  • /Applications/MAMP/conf/php5.4.4/php.ini
  • /Applications/MAMP/bin/php/php5.4.4/conf/php.ini

In der folgenden Zeile muss das führende Semikolon entfernt werden um die Extension zu aktivieren:

zend_extension="/Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"

Leider wird mein Breakpoint auch nach dieser Änderung nicht getroffen – was noch fehlen sind die Einstellungen in phpStorm. Dazu öffnen wir die Einstellungen, suchen nach „Debug“ und wählen PHP. Dort wählen wir das Language Level (in meinem Fall 5.4) und geben einen Interpreter an. Als Pfad zum Interpreter wählen wir das bin-Verzeichnis unter MAMP der entsprechenden Version:

  • PHP Home: /Applications/MAMP/bin/php/php5.4.4/bin
  • Version: Wird automatisch erkannt
  • Debugger: xDebug

xdebug_interpreter

Diese Einstellungen sind aber nur die Standardeinstellungen für „PHP-Scripts“ notwendig. Also für Scripts welche direkt aus phpStorm gestartet werden sollen. Das funktioniert in meinem Fall schonmal sehr gut – der Breakpoint wird direkt getroffen. Weiterhin funktionieren alle Debug-Optionen wie Step-Over, Step-Into, usw. Sieht auf den ersten Blick schonmal sehr gut aus.

Was mich aber besonders interessiert ist das Remote-Debugging. Ich möchte also nur den Breakpoint in einer beliebigen Datei setzen und die Adresse im Browser öffnen. Das hat nicht zuletzt Komfort-Gründe. Um nach eingehenden Verbindungen suchen zu lassen muss man folgenden Button drücken:

xdebug_phpstorm

Soweit ich verstanden habe, handelt es sich dabei um ein sog. „Zero-Configuration-Debugging“. Das heißt für mich, dass ich eigentlich keinerlei Einstellungen vornehmen muss damit der Breakpoint getroffen wird. Leider passiert: nichts.

Nach einiger Recherche im Netz bin ich darüber gestolpert, dass man das Remote-Debugging über einen URL-Parameter bekannt machen soll. Das finde ich persönlich nun etwas umständlich. Daher gibt es einige weitere Optionen die ich an die php.ini anhänge:

xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_autostart=On
;xdebug.remote_log=/tmp/xdebug.log
  • Remote_enable aktiviert grundsätzlich erstmal die Remote-Debug-Funktion
  • Remote_connect_back beschreibt, dass Remote-Debugging von jedem Host akzeptiert wird
  • Remote_Autostart gibt an, dass keine gesonderten Parameter übergeben werden müssen – es wird immer gestartet.
  • Remote_Log kann genutzt werden um weitere Informationen in eine Datei zu loggen (gut für Fehlersuche)

Nach einem Neustart des Apache und einem Klick auf „Start Listen PHP Debug Connections“ im phpStorm lief das Remote-Debugging problemlos.

  • Breakpoint setzen
  • URL im Browser aufrufen
  • Debuggen (phpStorm wird automatisch in den Vordergrund gebracht)

Troubleshooting

Falls alles nicht funktioniert und zu Problemen führt, könnte es an Kompatibilitätsproblemen liegen. In diesem Fall sollte man die OS X eigene Variante von xDebug verwenden. Dafür konfiguriert man einfach den Pfad in der php.ini um (Neustart der Server nicht vergessen):

zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"

Mit diesem Tool können außerdem Konfigurationsfehler seitens PHP festgestellt werden. Dazu wechselt man einfach in das entsprechende PHP-Verzeichnis und speichert die PHP-Info in eine Datei. Diesen Inhalt kopiert man dann und fügt ihn auf der Webseite ein. Wichtig: Darauf achten, dass ./php verwendet wird und nicht nur php. Ansonsten wird möglicherweise die php-Installation von einer anderen Stelle im System verwendet.

cd /Applications/MAMP/bin/php/php5.4.4/bin/
./php -i > /Users/matthiaskleine/Desktop/phpdump.txt

Der Benutzername sollte natürlich angepasst werden.

Mir wurde in diesem Schritt vorgeschlagen die xDebug Version zu aktualisieren (ich nutze 2.2.0 und 2.2.1 ist aktuell).

Weiterhin habe ich von Problemen mit Chrome gelesen – bei mir funktioniert diese Kombination zwar ohne Probleme, aber bevor man Stunden nach einem Konfigurationsfehler sucht, sollte man einen anderen Browser testen.

Ansonsten hat mir dieser Artikel sehr geholfen (leider etwas zu spät gefunden).


Beitrag veröffentlicht

in

, , , , , ,

von

Schlagwörter: