xDebug wird zum debbugen von PHP verwendet - recht praktisch wenn man live zur Laufzeit sehen will was das Skript da eigentlich macht. Hier wird beschrieben wie man den Webserver und das Modul konfiguriert, die Browser Extension installiert, vscode einstellt und die Portweiterleitung aktiviert. Debuggen müsst ihr allerdings noch selber.
am Webserver
php56:
pecl install xdebug-2.5.5
php7+:
pecl install xdebug
alles weiter ist für php56 beschrieben - in aktuellen PHP Umgebungen wird die Anleitung vermutlich leicht anders aussehen:
locate php.ini
# put within [PHP] section:
echo "
[xDebug]
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_connect_back = true
xdebug.remote_enable = 1
" >> /usr/local/lib/php.ini
# apache / php neu starten
/etc/init.d/httpd restart ; /etc/init.d/php-fpm restart
# phpinfo checken
php -i | grep -i xdebug.remote_connect
im Visual Studio Code
im Visual Studio Code im Side Menü unter Run eine neue Config zum Workspace hinzufügen:
"launch": {
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
// server -> local, only on remote web servers
"pathMappings": {
"/var/www/html/folder1": "${workspaceRoot:folder1}/",
"/var/www/html/folder2": "${workspaceRoot:folder2}/"
}
]
}
Die Eigenschaft pathMapping
in der launch config oben wird benötigt um vscode zu erklären, welche Pfade zusammengehören. workspaceRoot ist dabei das Verzeichnis in dem die vscode-workspace Datei liegt - mit :folder1
kann man in einem multi-root workspace die einzelnen Verzeichnisse ansprechen. Mit :folder1
wird dabei die Eigenschaft name
im folders
array der workspace Datei referenziert.
Danach kann der Debug Modus (F5) schon gestartet werden - und bspw. ein Breakpoint testweise irgendwo im Code (in einem Teil der später auch verwendet wird) gesetzt werden.
am lokalen Rechner
Wichtig: Da in unserem Fall der eigentliche PHP Prozess nicht am lokalen Rechner läuft, sondern auf einem Webserver remote, müssen die xdebug-Requests entsprechend weitergeleitet werden. Dies kann mit mittels SSH Tunnel oder putty machen. Für die einfachere ssh
Variante sieht die Konfiguration unter ~/.ssh/config
so aus:
Host ip-oder-name-des-webservers
User root
Port 22
ForwardAgent yes
RemoteForward 9000 127.0.0.1:9000
Sobald man zu diesem Webserver verbunden ist, werden alle Requests die auf Port 9000 am remote Webserver eingehen (dort schickt der Webserver die Xdebug Informationen hin) auf den lokalen Rechner weitergeleitet und vscode kann es abgreifen.
im Web Browser
Nun nur noch im Web Browser die Erweiterung xDebug Helper installieren (siehe unten) und bevor der eigentliche Request abgeschickt wird, den Helper auf Debug stellen. Wenn alles passt, sollte der Request stehen bleiben und vscode entsprechend reagieren und den aktuellen Kontext am Breakpoint anzeigen. Standardmäßig ist eingestellt, dass vscode bei Notices, Warnings, Errors und Exceptions (Everything) stehen bleibt - das kann bei "unqualitativem" Code recht schnell mühsam werden - im Reiter Breakpoints kann dies deaktiviert werden.
siehe auch:
- Chrome Erweiterung https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc/related
- Anleitung https://www.codewall.co.uk/debug-php-in-vscode-with-xdebug/
- Xdebug Config https://xdebug.org/docs/all_settings#remote_enable
- multi-root workspace im vscode: https://code.visualstudio.com/docs/editor/variables-reference#_variables-scoped-per-workspace-folder