Debugger

Francesco Ciannavei

Debugger

Il debugger è lo strumento che uso di più per capire perché qualcosa non funziona, in ogni linguaggio che lo permette. Due casi, trovati entrambi con Xdebug, raccontano meglio di tutto come lo uso.

Il pulsante che non aggiungeva nulla al carrello

In TUN2U un negozio Magento 2 usava un modulo di checkout di un fornitore esterno. Il pulsante "acquista di nuovo", che dovrebbe rimettere nel carrello i prodotti di un ordine passato, non funzionava: il prodotto non veniva aggiunto.

Ho seguito la richiesta con Xdebug, passo per passo, dentro il codice del modulo. Il modulo passava a Magento un identificativo, lo store ID se ricordo bene, come stringa. Magento si aspettava un intero: convertiva la stringa in 0 e cercava il prodotto nello store 0, dove non esisteva. Per questo l'aggiunta al carrello falliva.

Ho corretto il modulo perché passasse a Magento un intero, e il pulsante ha ripreso a funzionare.

Un 404 in staging durante una migrazione

Portando un software da CodeIgniter 3 a CodeIgniter 4, in staging è comparso un 404 quando l'applicazione gira in una sottocartella con indexPage impostato. Seguendo il flusso ho capito dov'era il problema nel routing e ho proposto una correzione al framework; nello stesso lavoro ho trovato funzioni helper di CodeIgniter 3 che in 4 non esistono più e le ho reimplementate. La storia completa, con il link alla pull request, è nella pagina su CodeIgniter.

Xdebug, anche da remoto

Con PHP uso Xdebug ogni giorno, integrato in PhpStorm o VS Code: breakpoint, ispezione delle variabili, call stack. La modalità remota è quella che mi salva più spesso: mi permette di fare debug di applicazioni che girano in container Docker o su un server come se fossero in locale. Su progetti Magento o Laravel, con decine di livelli di astrazione, è l'unico modo serio per capire il flusso.

Un debugger per ogni linguaggio

Non mi fermo a PHP. Per Go uso Delve, che ispeziona goroutine e canali e si può agganciare a un processo già in esecuzione. Per Python uso Debugpy, integrato in VS Code, comodo anche sul codice asincrono. Per il backend Node.js uso l'inspector via flag --inspect, e per il JavaScript nel browser i Chrome DevTools, con le estensioni dedicate per React e Vue.

Rating
10/10

Dove l'ho usato: