Debugging con PHP e XDebug

Diciamolo: a (quasi) tutti piace PHP per la propria facilità d’uso. Semplice da installare e configurare, altrettanto da programmare. Ma quando il gioco si fa duro, ecco che si sente la mancanza di quegli strumenti che rendono un linguaggio di programmazione solido. Nello specifico, di un debugger.

Ok lo ammetto, per anni anche io mi sono districato tra echo e print_r inseriti nelle pagine per andare alla ricerca degli errori. Naturalmente la musica è cambiata non appena ho perso quell’oretta necessaria ad installare e configurare un debugger PHP. Vediamo come.

Per prima cosa, installiamo Xdebug.
Xdebug è un modulo PHP, probabilmente già disponibile attraverso il vostro pacchettizzatore di fiducia sotto Linux. Altrimenti, sorgente compilabile o modulo per Windows sono disponibili sul sito ufficiale.

Il modulo va copiato nella extension_dir di PHP (verificarne la locazione nel php.ini).

Sempre nel php.ini, vanno aggiunti alcuni parametri di configurazione. Nel mio caso, ne sono stati necessari solo alcuni, ma controllate la documentazione in caso fosse necessario specificarne di diversi:

[XDebug]
zend_extension = "path/to/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_log = "/path/to/logs/xdebug.log"

Riavviate quindi Apache e verificate la corretta installazione del modulo tramite il classico phpinfo().

Ora che disponete del motore, passiamo all’abitacolo: il client. La lista è lunga, io ho fatto in tempo a testarne positivamente un paio, ovvero VIM e Eclipse. Eclipse in particolare, nella forma del PHP Development Tools, permette un debugging completo, con breakpoints, watch e tutto il necessaire. La configurazione sotto Eclipse dovrebbe essere piuttosto semplice: basta settare XDebug come debugger principale, al posto dello Zend, gli altri parametri dovrebbero essere già a posto.

Un’altra funzionalità della quale non riesco più a fare a meno è quella del profiling. Tramite questo processo siamo in grado di individuare quali parti del nostro programma impiegano la maggior percentuale del tempo totale di esecuzione, permettendoci di risolvere eventuali colli di bottiglia.

Per abilitare il profiling, è necessario tornare sul php.ini e aggiungere queste righe:

xdebug.profiler_enable = On
xdebug.profiler_output_dir = "/path/to/profiles/"

Il profiler non necessita di un client; è sufficiente aggiungere il parametro XDEBUG_PROFILE=1  alla nostra pagina web per avviarlo (es. http://localhost/test.php?XDEBUG_PROFILE=1).

In quella che avete settato come directory di xdebug.profiler_output_dir, verranno creati dei file del formato cachegrind.out.xxxx; apriteli con kcachegrind (Linux) o wincachegrind (Windows) per vedere come si è comportato il vostro script.

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , , , , ,

4 Responses to “Debugging con PHP e XDebug”

  1. Davide Petrillo » Blog Archive » Debugging con PHP e XDebug Says:
    January 7th, 2009 at 1:43 am

    [...] Davide Petrillo » Blog Archive » Debugging con PHP e XDebug Author: [...]

  2. marcello Says:
    April 8th, 2009 at 10:36 pm

    ciao Davide,

    ho configurato xdebug e tutto, e mi serve per debuggare dei plugin di wordpress.
    Come faccio quando si tratta di progetti di grossi ad usarlo?
    Nello specifico, non si tratta di errori nella index ma in un plugin, che puo’ essere chiamato
    corrente, soltanto andando nella pagina di amministrazione e facendo un tot di click.

    Spero di essere stato chiaro.

    In sostanza: come arrivo ai breakpoint che mi interessano, dalla index?
    Si puo’ o devo debuggare il file che mi interessa settando le variabili che normalmente vengono settate con la navigazione?

    Se non é chiaro, fammi sap.

    ciao e grazie

  3. Davide Says:
    April 11th, 2009 at 8:27 am

    Ciao Marcello,

    io in genere utilizzo Eclipse per il debugging.

    Con Eclipse, si puo’ fare quello che hai bisogno in due modi:

    - se la pagina che contiene il plugin e’ chiamabile tramite una semplice URL, puoi aggiungela alle pagine debuggabili (nel Debug Dialog). Puoi scrivere direttamente l’indirizzo nella forma /persorso/alla/pagina.php?query_string. Il nome del server viene preso automaticamente dai settaggi. A questo punto puoi lanciare il debug!

    - se la pagina richiede delle variabili in POST, e non rientra quindi nel caso precedente, puoi creare una pagina .php di appoggio che non fa altro che settare le variabili richieste e includere la tua pagina. A questo punto debugghi la pagina d’appoggio.

    Tieni in considerazione che ad ogni modo e’ possibile cambiare le variabili “on the run”, in fase di debugging, in caso avessi esigenze ancora piu’ particolari!

    Spero di essere stato chiaro ;)

  4. Marcello Says:
    April 11th, 2009 at 11:00 am

    ciao,

    Penso che posso fare la stessa cosa anche con netbeans.
    Tra poco provo.
    Effettivamente si tratta del caso nr.2, per il fatto che si devono settare diverse variabili in POST.

    GRAZIE MILLE e buon we

Leave a Reply