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: