Debugging in PHP mit Xdebug

Xdebug ist ein leistungsfähiges Debugging- und Profiling-Tool für PHP, das uns hilft, PHP-Anwendungen zu analysieren und zu optimieren. Es unterstützt Funktionen wie Schritt-für-Schritt-Debugging, Leistungsmessung und Stack-Tracing, was die Fehlersuche erheblich erleichtert und bessere Einblicke in den Code ermöglicht. Es folgt eine kleine Einrichtungsleitfaden für die Benutzung innerhalb von VSCode.


Xdebug installieren

Wir installieren Xdebug beispielhaft auf einem aktuellen Ubuntu-System:

sudo apt-get install -y php8.4-xdebug

Schließlich legen wir für die spätere Ablage von Profiling- und Tracing-Daten ein temporäres Verzeichnis an:

mkdir -p /tmp/xdebug

Xdebug konfigurieren

Nach der Installation konfigurieren wir Xdebug. Dazu editieren wir die php.ini:

vi /etc/php/8.4/fpm/conf.d/custom.ini

Es folgt eine sinnvolle Grundkonfiguration:

[xdebug]
; mode (see: https://xdebug.org/docs/all_settings#mode)
;   reasonable default
xdebug.mode=debug,profile
;   disabled
;xdebug.mode=off
;   step debugging
;xdebug.mode=debug
;   performance profiling (be aware of load/space)
;xdebug.mode=profile
;   trace profiling (record args)
;xdebug.mode=trace

; starting mode
;   always (not recommended)
;xdebug.start_with_request=yes
;   only when specific get parameters / cookies are set
;   (?XDEBUG_TRIGGER=1, ?XDEBUG_PROFILE=1, ?XDEBUG_TRACE=1, ?XDEBUG_SESSION=1)
;   this is best in conjunction with Chrome extension "Xdebug helper"
xdebug.start_with_request=trigger
;   folder for analyzing profile dumps
xdebug.output_dir="/tmp/xdebug"
;   not needed, since it is already in /etc/php/8.4/fpm/conf.d/20-xdebug.ini
;zend_extension=xdebug.so

Nach diesen Anpassungen starten wir PHP-FPM neu, um die Änderungen zu übernehmen:

sudo service php8.4-fpm restart

VSCode konfigurieren

Um Xdebug in Visual Studio Code zu nutzen, sind zwei Erweiterungen und eine Anpassung der Konfiguration erforderlich. Wir installieren dazu:

  • PHP Debug: für grundlegende Debugging-Funktionalität.
  • PHP Profiler: Für die Analyse der Cachegrind-Dateien.

Schließlich erstellen wir die Konfigurationsdatei launch.json im Ordner .vscode des zu analysierenden Projekts:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "ignore": ["**/vendor/**/*.php"]
        }
    ]
}

Chrome Extension installieren

Für ein flexibles Debugging im Browser hat sich die Extension Xdebug helper bewährt. Diese ermöglicht es, Xdebug nur bei Bedarf zu aktivieren oder zu deaktivieren. Außerdem kann man bequem den Debug-Modus ändern (um so beispielsweise von Debugging auf Profiling umzuschalten):

WordPress konfigurieren

Wenn man Xdebug in einer WordPress-Umgebung verwendet, kann es sinnvoll sein, das Debugging innerhalb von Cronjobs zu deaktivieren, wenn eine Debugging-Sitzung aktiv ist. Das erleichtert das Debugging von Anfragen. Dazu fügt man folgende Zeile in die wp-config.php ein:

// disable wp cron on xdebug sessions
if (function_exists('xdebug_is_debugger_active') && xdebug_is_debugger_active()) {
    define('DISABLE_WP_CRON', true);
}

Mit dieser Konfiguration haben wir ein leistungsstarkes Setup, das uns ermöglicht, komplexe Debugging-Probleme präzise zu meistern. Ob beim Finden hartnäckiger Bugs oder beim Feintuning von Performance-Problemen – Xdebug macht die Arbeit nicht nur effizienter, sondern bringt durch die Kontrolle und Klarheit über den Code eine neue Qualität in die Entwicklung.

Zurück