diff --git a/.docker/php/Dockerfile b/.docker/php/Dockerfile index baacdfe..99d480f 100644 --- a/.docker/php/Dockerfile +++ b/.docker/php/Dockerfile @@ -3,6 +3,6 @@ FROM php:8.5.8-cli RUN pecl install xdebug && docker-php-ext-enable xdebug WORKDIR /app -EXPOSE 8000 9013 +EXPOSE 8000 CMD ["php", "-S", "0.0.0.0:8000", "-t", "public", "public/index.php"] diff --git a/.docker/php/xdebug.ini b/.docker/php/xdebug.ini index 916cc1a..ce214a0 100644 --- a/.docker/php/xdebug.ini +++ b/.docker/php/xdebug.ini @@ -5,5 +5,6 @@ xdebug.mode=develop,debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9013 -xdebug.log_level=0 -xdebug.idekey=VSCODE \ No newline at end of file +xdebug.log=/tmp/xdebug.log +xdebug.log_level=7 +xdebug.idekey=VSCODE diff --git a/.vscode/launch.json b/.vscode/launch.json index 0692010..7476ca9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,6 +8,7 @@ "name": "API - Listen for Xdebug", "type": "php", "request": "launch", + "hostname": "0.0.0.0", "port": 9013, "pathMappings": { "/app": "${workspaceFolder}" @@ -38,4 +39,4 @@ } } ] -} \ No newline at end of file +} diff --git a/docker-compose.yml b/docker-compose.yml index d1ab128..fd034d3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,4 +16,4 @@ services: - ./.docker/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini #environment: # XDEBUG_MODE: debug - # XDEBUG_CONFIG: client_host=host.docker.internal client_port=9003 start_with_request=yes + # XDEBUG_CONFIG: client_host=host.docker.internal client_port=9013 start_with_request=yes diff --git a/docs/debug-api-vscode-docker.md b/docs/debug-api-vscode-docker.md index 9eef838..80e8c75 100644 --- a/docs/debug-api-vscode-docker.md +++ b/docs/debug-api-vscode-docker.md @@ -15,12 +15,11 @@ Il progetto contiene già i file necessari per il debug: - `.docker/php/Dockerfile` - container PHP con Xdebug - `docker-compose.yml` - configurazione Docker - `.vscode/launch.json` - configurazione di avvio VS Code -- `.vscode/settings.json` - impostazioni VS Code -Il container espone: +Il servizio usa: - **porta `8000`** per HTTP -- **porta `9003`** per Xdebug +- **porta host `9013`** per la connessione in uscita di Xdebug verso VS Code ## 2. Avvia il container @@ -39,7 +38,7 @@ http://localhost:8000 ## 3. Avvia il debug in VS Code 1. Apri la sezione **Run and Debug** in VS Code (Ctrl+Shift+D) -2. Seleziona la configurazione: **Debug PHP in Docker** +2. Seleziona la configurazione: **API - Listen for Xdebug** 3. Premi **F5** per avviare il debugger ## 4. Imposta un breakpoint e testa @@ -56,12 +55,15 @@ http://localhost:8000 http://localhost:8000/api/users ``` -3. Oppure usa curl con il trigger Xdebug: +3. Esegui la stessa richiesta con curl: ```bash - curl -H "XDEBUG_TRIGGER: 1" http://localhost:8000/api/users + curl http://localhost:8000/api/users ``` + `xdebug.start_with_request=yes` avvia il tentativo di connessione per ogni + richiesta, quindi non serve aggiungere `XDEBUG_TRIGGER`. + Il debugger dovrebbe fermarsi sul breakpoint e permetterti di ispezionare le variabili. ## 5. Risoluzione dei problemi @@ -69,13 +71,14 @@ Il debugger dovrebbe fermarsi sul breakpoint e permetterti di ispezionare le var ### VS Code non si ferma sul breakpoint - Verifica che Xdebug sia abilitato nel container -- Controlla che la configurazione `client_host` nel Dockerfile punti a `host.docker.internal` -- Verifica che la porta 9003 sia disponibile e non bloccata dal firewall +- Controlla che `xdebug.client_host` in `.docker/php/xdebug.ini` punti a + `host.docker.internal` +- Verifica che la porta 9013 sia disponibile e non bloccata dal firewall ### Il container non si avvia - Assicurati che Docker Desktop sia in esecuzione -- Verifica che le porte 8000 e 9003 non siano già in uso +- Verifica che la porta HTTP 8000 non sia già in uso - Controlla i log di Docker per errori specifici ### "Failed to fetch" dalle richieste del frontend @@ -84,6 +87,19 @@ Il debugger dovrebbe fermarsi sul breakpoint e permetterti di ispezionare le var - Controlla che `allowed_origins` in `config/config.php` includa l'origine del frontend - Testa con l'endpoint di diagnostica `/cors-check` +### Diagnostica avanzata dei breakpoint + +Il log Xdebug è scritto nel container in `/tmp/xdebug.log`. Per analizzare anche +la registrazione e la risoluzione dei breakpoint, imposta temporaneamente +`xdebug.log_level=10` in `.docker/php/xdebug.ini`, riavvia il container e usa: + +```bash +docker exec elixforms-ws tail -f /tmp/xdebug.log +``` + +Al termine ripristina `xdebug.log_level=7`, perché il livello 10 produce molti +dettagli per ogni riga eseguita. + ## Note - La procedura di debug influisce solo sulla sessione VS Code, il server continua a funzionare normalmente