Vim IDE per Php
Debug del codice Php con Xdebug
Nello sviluppo di un programma non può mancare la fase di debug. Xdebug è un’estensione per il Php molto utile per fare il debug di quest’ultimo.
Per installarlo in Fedora è molto semplice:
$ su -c "yum install php-pecl-xdebug"
Per fare il debug di una applicazione Php ci sono vari sistemi, quello che propongo e che trovo più semplice e utile è il debug remoto. La documentazione ufficiale e molto ben fatta, si trova a questo indirizzo.
In questo articolo mi concentro su Vim, non sulle possibili differenti configurazioni di Xdebug e su come farlo funzionare correttamente, dunque rimando tutto alla documentazione ufficiale che è più che esauriente.
Se l’installazione è andata a termine correttamente si può passare al controllo della configurazione di xdebug. Il file di configurazione di xdebug in fedora si trova sotto /etc/php.d/xdebug.ini
. Il mio file di configurazione è fatto così:
$ cat /etc/php.d/xdebug.ini
; Enable xdebug extension module
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.remote_enable=1
xdebug.remote_log=/var/log/httpd/xdebug.log
xdebug.trace_output_dir=/tmp/xdebug
;
;xdebug.auto_trace = 0
;;
;xdebug.profiler_enable = 0
Dopo un riavvio di apache, nella pagina di informazioni del Php si potrà vedere che l’estensione xdebug è attiva sul proprio server.
Ora che il pacchetto Xdebug è installato e correttamente caricato (la pagina di informazioni di Php ce lo conferma) bisogna trasformare Vim in un client per il protocollo GDB (The GNU Project Debugger).
Per farlo si può usare il plugin DBGp client scritto da Sam Ghods il quale sul suo sito web ha fatto un’ottima guida su come installare e configurare xdebug ed il suo plugin. Questo plugin però è datato, Hadi Zeftin ne ha scritto uno più aggiornato che risolve alcuni problemi ed è reperibile a questo indirizzo.
Dunque prima di tutto bisogna scaricare il pacchetto del plugin da qui.
Dopo averlo scaricato bisogna scompattare il suo contenuto (i due file debugger.vim e debugger.py) all’interno della directory .vim/plugin
presente nella home directory del proprio utente. Se è andato tutto liscio si può passare al primo debug della propria applicazione.
Per il debug basta aprire un file qualsiasi del proprio progetto e pigiare F5
. Si hanno da ora 10 secondi di tempo(il plugin precedente impostava 5 secondi massimi di attesa) per avviare una sessione di debug sul proprio server (o fare il refresh della pagina interessata sul browser nel caso si sia già avviata una sessione). Per farlo basta andare con il proprio browser web preferito alla pagina index.php (o alla pagina php di interesse) del proprio progetto avendo l’accortezza di richiamare la pagina aggiungendo in fondo all’URL ?XDEBUG_SESSION_START=1
. Per cui se ho il mio sito di nome example.com avvio la sessione di debug con l’URL: http://example.com/index.php?XDEBUG_SESSION_START=1.
Tornando su Vim si potrà notare che è stata catturata la sessione di debug, viene aperto un nuovo tab.
Se si usa firefox si può utilizzare un’estensione interessante per avviare la sessione di debug: easy Xdebug.
La sessione dopo un tot di tempo scade, per riavviarla basta richiamare di nuovo la pagina php come detto pocanzi.
Si può anche fermare la sessione di debug richiamando la pagina stessa con:
?XDEBUG_SESSION_STOP
Prima di passare alla spiegazione su come usare il plugin in Vim per il debug faccio notare che la sessione di debug basta lanciarla solo una prima volta. Mi spiego: una volta che ho finito il debug della mia applicazione con Vim e voglio rifare il debug dei miei script non occorre che richiamo la sessione come con l’URL che ho citato prima (http://example.com/index.php?XDEBUG_SESSION_START=1), basta semplicemente che richiami la mia pagina normalmente(http://example.com/index.php) o faccia un refresh della pagina dopo aver pigiato F5
in Vim.
Sono costretto a richiamare l’url per l’avvio della sessione solo se il tempo di sessione del debug è scaduto o se ho chiuso la sessione di debug con XDEBUG_SESSION_STOP
.
L’uso del plugin client per il debug in Vim è davvero molto molto semplice. Una volta che è stata catturata la sessione di debug per fare il debug “step by step” della pagina richiamata dal browser basta pigiare F2
. Si scorrerà così il codice Php riga per riga.
Per saltare un ciclo o la chiamata di una funzione, senza dover entrare dentro ad ogni singolo annidamento si può usare al posto di F2
F3
.
Importante è poi l’uso dei breackpoint. Per aggiungere un breackpoint basta aprire il file che ci interessa e col cursore sulla riga di interesse in modalità comandi di Vim dare :Bp
, la riga si evidenzia in verde e indica che è stato inserito il breackpoint, per toglierlo basta usare nuovamente :Bp
. Per saltare direttamente alla riga di breackpoint, dopo aver catturato la sessione di debug, basta pigiare F4
.
Oltre a vedere la sequenza su come viene eseguito il codice Php è importante anche vedere che valori assumono le variabili in gioco.
Per farlo basta usare o F11
o F12
.
Il primo fa vedere, nel riquadro in alto di Vim, tutte le variabili presenti fino al punto in cui si è eseguito il codice.
Il secondo permette invece, dopo essersi posizionati col cursore sopra la variabile di interesse, di vedere il valore di questa sempre nel riquadro in alto.
Se si è in debug e in modalità normale (o comandi) di Vim si può anche usare la combinazione ,e
per poter avere la possibilità di scrivere la variabile di interesse.
Quando si sta eseguendo il debug capita che lo stack del Php si riempia di file che vengono richiamati. Con questo plugin è facile muoversi nello stack per recuperare la posizione da dove un file è stato richiamato per esempio. Per farlo basta semplicemente usare uno dei due comandi :Up : Dn
per salire o scendere nello stack. Lo stack è visualizzato nel riquadro in basso a destra di Vim.
Nel riquadro centrale a destra c’è una piccola finestra che ricorda le funzioni che ho descritto in questa sezione del mio articolo.
4 Commenti
Aggiungi un commento Annulla risposta
Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.
ciao Mario,
interessante la tua guida, che mi studierò non appena trovo il tempo (tiranno!).
Visto che sei esperto, ti volevo fare una domanda.
Da anni utilizzo sempre editor ascii che prevedano l’emulazione brief. Brief è un “antico” editor derivante dal mondo mainframe che ha la possibilità di settare la tastiera opportunamente. Es. il tasto “-” del tastierino numerico, taglia la riga e la mette in buffer. Tasto “ins” inserisce la riga che ha in buffer.
Ma questo certamente si può configurare con qualunque editor programmabile.
Quello che invece non si trova facilmente è la “selezione colonna”, che invece in brief è semplicissima con “alt+c” ed è utilissima, ad esempio, per fare le identazioni.
Hai idea se si possa configurare in vim e come?
Grazie e buon lavoro,
daniele
Scusami, non ho capito cosa intendi con “selezione colonna”.
In Vim un modo veloce fare le indentazioni del testo è usare “>” (indenta a destra) e “<" (indenta a sinistra), anche dopo aver selezionato la porzione di testo di interesse con maiusc + v.
Ciao,
molto interessante il tuo post, ti segnalo una piccola cosa riguardo il plugin per la documentazione: dopo aver installato ManPageView e elinks il comando da usare per cercare doc è :
:Man nome_funzione.php (es :Man phpinfo.php)
Ciao
Non dovrebbe servire aggiungere l’estensione .php alla ricerca. Correntemente uso, senza problemi, il comando in questo modo :Man nome_funzione