Browsing this web site you accept techinical and statistical cookies [info] chiudi

Tutti quelli che lavorano sul Web lo sanno: lo sviluppatore PHP è abituato (male) a debuggare a colpi di print/echo e compagnia, e talvolta gli piace anche! :-)

Ok, non è solo colpa del povero web developer, debuggare non è out-of-the-box come su altri linguaggi o piattaforme... (a meno di non usare IDE proprietari tipo Zend Studio)... ma ora.... siamo nel 2008, ci sarà un modo semplice per farlo usando strumenti open source? O vogliamo farci abbattere dalla frustrazione del print/echo/log e continuare a perdere un sacco di tempo???

Una soluzione integrata, efficace e libera è usare la combinazione Xdebug + Eclipse + PDT (il plugin per sviluppare in PHP che supporta anche il debugger Zend). In rete troverete un bel pò di materiale su come fare. In fondo al post troverete un paio di link utili. Non sto a riscrivere howto/tutorial già ben fatti, leggeteli... di seguito riassumo il tutto in 5 passi, con alcuni problemi comuni (e relative soluzioni) che tipicamente incontrerete. (ah... Eclipse+PDT li dovete già avere)

1. installate l'entensione Xdebug, su linux troverete qualcosa tipo php5-xdebug nel gestore di pacchetti, per win ci sono binari, per mac non so...per chi ha tempo e voglia si può sempre ricompilare; se avete installato il debugger Zend rimuovetelo, va in conflitto con Xdebug, quindi se pensavate di installarlo non fatelo! chiaro il concetto?.... e non dimenticate la cartolina! ;-)

2. configurate il modulo, prendete il php.ini che vi serve guardando la voce "Configuration File" nell'output di phpinfo() per script web o con php -i | grep "Configuration File" per script commandline CLI. Una configurazione di esempio è:

[XDebug]
zend_extension=/usr/lib/php5/extensions/xdebug.so
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_output_dir=/tmp

  • ATTENZIONE per la voce zend_extension usate pathnames assoluti, ma soprattutto la voce da abilitare potrebbe non essere zend_extension ma zend_extension_debug o zend_extension_ts o ancora zend_extension_debug_ts; per capirlo guardate in phpinfo() o php -i le voci Debug Build e Thread Safety, quindi partire da zend_extension:
  1. se Debug Build => yes , aggiungete _debug
  2. se Thread Safety => enabled , aggiungete _ts

3. riavviate il web server e controllate l'output di  phpinfo(), troverete "Zend Scripting Language Engine...with Xdebug 2. ...". Analogamente verificate sulla command line con php -i | grep "Xdebug" , gia' che ci siete verificate i moduli con php -m (no zend debugger, only xdebug!)

4. configurazione di eclipse PDT:

  • Window/Preferences/PHP/PHP executables: aggiungete una voce con path completo dell'eseguibile php CLI con php.ini relativo
  • Window/Preferences/PHP/Debug:Xdebug come debugger predefinito, come eseguibile quello definito sopra, e abilitate anche "Open in Browser" fra le workbench options

5. esegui il debugger, è arrivato il grande momento.... andate in "Run/Open Debug Dialog..." create nuove voci sul vostro progetto

  •  PHP Script (solo PHP CLI): impostate Debugger (Xdebug), eseguibile PHP e file .php da debuggare (relativamente al worskpace); è comodo impostare "Break at first line" se non siete strasicuri del flusso di esecuzione, avrete un breakpoint alla prima riga
  • PHP Web Page: impostate Server Debugger (Xdebug), il file iniziale o principale della sessione (non sarà l'unico debuggabile ovviamente), "Break at first line" se preferite e attenzione: non usate URL Auto generate tipicamente Eclipse non conosce la vostra configurazione del web server... impostate a mano l'url principale del progetto
  • premete Apply e poi Debug...

A questo punto breakpoints, variabili, espressioni..... e mai più echo/print.. promesso?