Come installare Xdebug in un ambiente di sviluppo su Visual Studio Code, all'interno di un Docker container su WSL.

Aggiungere questo nel Dockerfile:

FROM php:<tag che usi>

# La tua roba
# ...

# Se usi l'immagine ufficiale di PHP, attenzione a creare il php.ini
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" # per la produzione
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" # per lo sviluppo

# Install Xdebug
RUN apk add build-base \
    && apk add --no-cache --update --virtual buildDeps autoconf \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug \
    && apk del buildDeps

Poi mettere questo nel launch.json di VSCode:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "pathMappings": {
        "/code": "${workspaceFolder}"
      },
      "hostname": "localhost"
    }
  ]
}

E questo nel php.ini:

; XDebug settings
xdebug.mode=debug,develop
xdebug.start_with_request=yes

Installare l'estensione ufficiale di Xdebug su VSCode.

A questo punto:

  • esegui il debugger di VSCode configurato prima: "Listen for XDebug";
  • imposta i breakpoints;
  • esegui il codice via test o via chiamata HTTP dal browser.

Se i breakpoints non venissero colpiti, potrebbe essere necessario impostare la seguente regola sul firewall di Windows:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow