Debuggen in Shopware mit XDebug und Phpstorm

Im heutigen Beitrag zeig ich euch, wie Ihr XDebug mit Phpstorm einsetzt um Shopware vernünftig zu debuggen. Das spart euch besonders bei der Pluginentwicklung eine Menge Zeit und Nervern …

PHP Profiler Xdebug

Wenn Ihr nicht wollt, das eure Daten auf Servern von Drittanbietern liegen, dann empfehle ich euch Xdebug oder XHProf zu nutzen – andere Anbieter wie Tideways, New Relic, Z-Ray, Blackfire speichern eure Daten extern zwischen (müssen Sie für die Historisierung auch).

Xdebug Installation

Ihr könnt Xdebug entweder via PECL oder apt-get installieren:

sudo pecl install xdebug
oder
sudo apt-get install php7.0-xdebug

Ich nutze NGINX als Wesberver, daher muss ich die Konfiguration von xdebug im fpm Ordner anpassen:

sudo nano /etc/php/7.0/fpm/php.ini

Ihr findet die passende php.ini File für die CLI mit folgendem Befehl:

php -i | grep 'Configuration File'

da Ihr aber die php.ini File des normalen PHP compiling wollt, schaut einfach in eure phpinfo(); Ausgabe – dort unter Configuration File.

xdebug.remote_enable=on
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

Ioncube

Solltest du Ioncube für das entschlüsseln von Plugins benötigen, achte darauf das Ioncube VOR xdebug geladen wird. Früher war ein debuggen mit PHP5.6 und Ioncube nicht möglich, mit PHP7.0 und Xdebug 2.5.x aber kein Problem mehr.

PhpStorm konfigurieren

Zuerst gehen wir auf File -> Settings Languages & Framework -> PHP und passen dort, falls noch nicht eingetragen das PHP language leven und den CLI Interpreter an (in meinem Fall 7 und und PHP 7.0)

Danach gehen wir auf das Submenu Debug und klicken dort auf Validate

In unserem Fall bleibt die Config auf localhost – das erzeugt zwar in Phpstorm eine Warnung, die interessiert uns aber nicht. Alle anderen Info’s sollten aber übereinstimmen.

Danach bearbeiten wir noch die Run/Debug Konfiguration

und fügen dort mit dem + eine PHP Remote Debug hinzu

Nun müssen wir noch einen Server auswählen bzw. hinzufügen:

 

Jetzt klicken wir auf den grünen Käfer/Bug und es sollte sich unten ein neue Tab öffnen.

 

Chrome Extension für Xdebug

Damit Xdebug funktioniert muss ein XDEBUG_SESSION Cookie gesetzt werden, die kann man mit einer Chrome Extension machen oder mit Bookmarklets

Wenn Ihr sowieso Chrome nutzt, empfehle ich euch diese Extension.

Nach der Installation findet Ihr die Extension hier:

Xdebug Chrome Extension

Wichtig beim erstellen steht der Debugger im Standard auf Eclipse als IDE. Dort müsst Ihr Phpstorm auswählen und euren Key auf PHPSTORM anpassen.

Erster Testrun!

Wir öffnen unseren Chrome und gehen auf unsere lokale Shopware Installation – dort prüfen wir vorab einmal den Zustand. Xdebug Chrome Extension ist noch inaktiv und es sollte keine Session gesetzt sein.

Nun aktivieren wir den Debug Modus in der Erweiterung. Diese setzt das XDEBUG_SESSION Cookie mit dem jeweiligen Key als Value.

Demoshop Shopware Xdebug Chrome Extension
Demoshop Shopware Xdebug Chrome Extension

Breakpoint setzen

Um nun einen bestimmten Bereich zu debuggen, setzen wir einen Breakpoint in Phpstorm – das macht Ihr einfach mit einem Klick neben die Zeilennummer

In diesem Fall bin ich auf Enlight_Controller_Action_PostDispatch_Frontend_Detail und muss daher für eine Analyse auf eine Produktdetailseite.

Der Request im Browser geht dabei nicht durch, sondern bekommt einen 500er Error – allerdings bekommen wir dann folgende Daten in Phpstorm:

Schön zu sehen wir Shopware, bei eingeschaltetem HTTP Cache reagiert und welche Calls dabei eigentlich ablaufen. Der Debugger listet bis zum Breaktpoint alle genutzten .php Files auf und man kann über einen einfachen Klick direkt zum jeweiligen Programmpunkt springen.

Phpstorm Xdebug jump to file

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert