Arxiu de maig 2010

Un dels principals defectes de la majoria de programadors de PHP és oblidar-se de les eines de depuració (debugger). Tots hem estat en feines on no disposaven d’aquestes eines a la nostra màquina, o no permetien la seva instal·lació, o senzillament no hem pensat en posar-les.

Jo vaig començar el meu primer contacte amb la programació amb el llenguatge c. Llavors a la universitat ens feien usar el programa Microsoft Visual Studio, amb el qual podíem compilar i depurar (debug). La depuració ens permetia seguir el programa pas a pas i saber el valor de cada variable en cada moment, i corregir així errors existents que s’escapaven a simple vista i que no eren de sintaxi.

En passar a PHP, penso que és més difícil entendre com funciona la depuració, pel fet de tenir el navegador per un costat i l’entorn integrat de desenvolupament (o IDE de l’acrònim en anglès) per un altre. Tanmateix, cal instal·lar prèviament alguna cosa al servidor per poder-li indicar des del nostre IDE l’ordre d’aturar-se a la línia de codi que nosaltres vulguem. Per aquest conjunt de factors la majoria de programadors prescindeixen del depurador com a tal i utilitzen el mètode de prova i error, i miren el valor de les variables enviant el seu valor directament al navegador. Les tres funcions de PHP més utilitzades per fer això són: echo, print_r i var_dump.

Jo he passat força temps utilitzant-les també, però quan tornes a la depuració t’adones que abans estaves perdent el temps. Amb aquest rudimentari mètode, si no coneixes molt bé el codi, primer has de trobar el punt on està la variable que vols observar, teclejar el codi que mostri el seu valor i executar la consulta de la pàgina des del navegador. Molt bé, ja has vist el seu contingut, però com ha estat calculat? Com s’ha arribat fins aquí, a través de quins fitxers, mètodes o funcions? La majoria de vegades has de tornar a escriure més codi per mostrar altres variables, perquè l’anterior no t’ha servit de massa, i tornar a actualitzar el navegador. A més a més, després cal eliminar tot aquest codi extra que has creat només per mirar el valor d’algunes de les variables. I quantes vegades passa -a mi també- que acaba pujant a producció codi amb aquestes sentències de “depuració”?

Per evitar tot això, el millor és usar un depurador de veritat. Encara que al principi perdem una mica de temps per configurar-lo i aprendre com funciona, després ens estalviarà molt temps i mal de caps. Jo per desenvolupar en PHP i MySQL utilitzo el servidor web Apache2 sobre Ubuntu; una solució LAMP vaja. I com a IDE l’Eclipse amb el PDT (PHP Development Tools) i alguns altres plugins.

Amb els següents passos podreu instal·lar xdebug amb l’Apache2 i PHP:

sudo apt-get install php5-xdebug

Això ha instal·lat el paquet corresponent i ha creat el fitxer /etc/php5/conf.d/xdebug.ini amb aquest contingut:

zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so

Si ara comprovem el resultat de cridar a phpinfo(), veurem:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans

Al mateix fitxer xdebug.ini hem d’afegir aquestes línies:

xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

I ja per acabar, carreguem els canvis de configuració a l’Apache:

sudo /etc/init.d/apache2 reload

En un altre capítol escriuré com configurar l’Eclipse per depurar des d’allà.

Gràcies Derick pel fantàstic xdebug!

GD Star Rating
loading...

Comments No Hi Ha Comentaris »

El sistema operatiu que he estat utilitzant des que va sortir a l’octubre del 2009 és el Kubuntu 9.10 (Karmic Koala) i volia actualitzar a la versió 10.04 LTS (Lucid Lynx) de finals d’abril d’enguany. Aquesta nova versió té la característica de ser LTS (Long Term Suport), la qual cosa vol dir que ens asseguren suport oficial i actualitzacions pel nostre sistema durant 3 anys en l’entorn d’escriptori i 5 en el de servidors.

He de dir que la versió que estava usant tampoc era una instal·lació neta o des de zero, sinó una altra actualització de la versió anterior, la qual alhora era una altra de més anterior encara, la Kubuntu 8.10 (Intrepid Ibex) que vaig instal·lar el 30 d’octubre del 2008.

Aquesta vegada però, l’actualització va fallar. S’havien actualitzat només alguns (molt pocs) paquets, però al fitxer /etc/issue ja indicava que tenia la versió nova Ubuntu 10.04. Podia reiniciar l’ordinador i funcionava com abans, però en fer l’actualització del gruix de paquets es va produir l’error:

E: Internal Error, Could not perform immediate configuration on ‘util-linux’. Please see man 5 apt.conf.

El problema és que l’Apt vol instal·lar el paquet util-linux, el qual forma part del paquet upstart-job, però sembla que l’apt no ho sap. Després d’intentar vàries vegades el apt-get upgrade i el dpkg-reconfigure -a, continuava tenint el sistema de paquets trencat. Com s’havia tocat el paquet del grub2 i el MBR del disc dur, en reiniciar ja no va tornar a funcionar.

Així doncs, vaig agafar el CD de la versió més recent de Kubuntu que tinc (la 9.04), disposat a fer una instal·lació neta. Per tant primer havia d’instal·lar-la, després passar a la 9.10 i finalment a la 10.04. Aquí teniu els passos seguits:

sudo apt-get update
sudo apt-get upgrade

225 actualitzats, 0 nous a instal·lar, 0 a suprimir i 12 no actualitzats.
Es necessita obtenir 244MB d’arxius.
Després d’aquesta operació s’empraran 1765kB d’espai en disc addicional.

sudo apt-get dist-upgrade

12 actualitzats, 5 nous a instal·lar, 0 a suprimir i 0 no actualitzats.
Es necessita obtenir 35,9MB d’arxius.
Després d’aquesta operació s’empraran 173MB d’espai en disc addicional.

update-notifier-kde -u

Se suprimiran 15 paquets. S’instal·laran 209 paquets nou. S’actualitzaran 757 paquets. Heu de baixar un total de 727 MB. La baixada trigarà aproximadament 30 minuts amb la vostra conexió. La baixada i l’actualització poden durar algunes hores, i no podreu cancel·lar aquesta última un cop hagi començat.

sudo apt-get update
sudo apt-get upgrade

0 actualitzats, 0 nous a instal·lar, 0 a suprimir i 0 no actualitzats.

sudo apt-get dist-upgrade

0 actualitzats, 0 nous a instal·lar, 0 a suprimir i 0 no actualitzats.

update-notifier-kde -u

Se suprimiran 21 paquets. S’instal·laran 141 paquets nou. S’actualitzaran 996 paquets. Heu de baixar un total de 798 MB. La baixada trigarà aproximadament 34 minuts amb la vostra conexió. La baixada i l’actualització poden durar algunes hores, i no podreu cancel·lar aquesta última un cop hagi començat.

I ja està, ara sí que disposo de la darrera versió de Kubuntu, la 10.04.

“Només” he hagut de descarregar un total de 1805 MB  en paquets. :)

GD Star Rating
loading...

Comments No Hi Ha Comentaris »