Casiva Agustin

Engineering, Development and IT Management

Hi there! 馃憢

I’m Agustin Casiva, I’m a Software Engineer from Argentina.

I have been working on IT for many years now, I worked in many fields of the industry, such as hardware support, networking, sysadmin but what I do love most is development.

I have worked for many organizations, public and private, local and remote, filling many roles.

My expertise is on Web Development, Linux, Open Source, CMSs, HTML, CSS, PHP, JavaScript, Backend Development, Product Development, Project Management, Team Leading, among others.

In 2013 I have founded 42mate, a Web Development Agency focused on the design, development, maintenance of Web Apps. I still work on 42mate where I work leading development teams and scoping new projects.

Besides 42mate I also work as an independent consultant where I provide services such as

  • Development Training, for individuals or teams.
  • Architecture Design and Review.
  • Tech Advisor for non tech startup founders.
  • Tech Advisor for Digital Design Agencies.

If you are interested on my services let’s talk!

More about me

Xdebug, Var_dump con Esteroides


Todav铆a recuerdo la 茅poca cuando PHP no ten铆a Xdebug, cuando andabamos con print_r y echo para poder debugear algo en esos miles y miles de scripts que estaban llenos de includes y requires, haaaa que tiempos, menos mal que ya paso. No voy a contar que es Xdebug por que asumo que ya tenes idea que es, tampoco voy a contarles como instalarlo por que la internet esta llena de art铆culos sobre ello.

Este articulo va a ir al grano, a como usar cosas mas copadas que solo ver colorcitos en el var_dump y conectarlo con la IDE para hacer un debug paso a paso, vamos a ver algunos puntos que nos pueden ayudar en esos momentos de desesperaci贸n en que no podemos encontrar el problema.

Var_dump

Ok, si, lo primero a ver es var_dump, si lo usamos por defecto var dump va mostrar la informaci贸n de una variable de manera recursiva, el problema es que por defecto PHP trae los errores HTML desactivados, lo primero que deber铆amos hacer despu茅s de instalar xdebug es setear html_errors en el php.ini en On

html_errors = On

Tambien siendo que esta es una configuraci贸n de desarrollo deber铆amos habilitar la salida de error.

display_errors = On

Ya que estamos en el php.ini vamos a ver tres par谩metros que afectan a Xdebug, estos par谩metros afectan la forma que Xdebug presenta la informaci贸n en el var_dump y en los mensajes de error.

xdebug.var_display_max_depth : Default 3, Cuan profundo se va a buscar atributos. Vean en este ejemplo, un caso esta con profundidad 1 por ende la informaci贸n aparece muy resumida, el otro esta en 3, podemos ver mas datos. Util para cuando tenemos varios niveles de anidamiento.

Screen Shot 2013-02-20 at 9.14.49 PM

xdebug.var_display_max_children : Default 128, Cuantos atributos del objeto se van mostrar, observen el primer caso, solo muestra un atributo por elemento, en el siguiente caso muestra hasta 128. Util para casos donde el objeto sea muuuy grande.

Screen Shot 2013-02-20 at 9.17.20 PM

xdebug.var_display_max_data : Default 512, cuantos caracteres del string en una variable se van a mostrar. Util para estirar la cadena de caracteres a mostrar cuando necesitamos analizar los textos del las variables.

Screen Shot 2013-02-20 at 9.18.14 PM

xdebug.collect_params=4 : Este parametro permite recolectar datos de las variables y los valores que toma cada invocaci贸n a una funci贸n, cuando salte un error o hagamos un trace podremos ver estos valores reflejados en el stack trace. Por defecto esta en 0 (no colecta nada), a mi personalmente me gusta 4.

Bien, ahora sabemos como customizar nuestro var_dump para casos extremos donde no estamos viendo lo que necesitamos.

Otras Funciones

Si queremos ver un poco mas de informaci贸n, por ejemplo cuando trabajamos con variables por referencia, podemos usar la funcion xdebug_debug_zval, esta recibe como par谩metro el nombre de la variable a mostrar y ademas de la informaci贸n que nos provee var_dumpo nos muestra informaci贸n de refcount (cuantas variables apuntan a este valor) y si es una referencia. Este es un ejemplo de una salida de xdebug_debug_zval.

Screen Shot 2013-02-20 at 9.27.49 PM

Otra funci贸n muy 煤til es xdebug_dump_superglobals, esta nos dumpea el valor de las variables super globales, pero para hacerla funcionar correctamente necesita una configuraci贸n para indicar que variables queremos ver exactamente, esta configuracion se puede hacer en el php.ini, .htaccess o via ini_set, este es un ejemplo bastante pr谩ctico.

   xdebug.dump.GET=*
   xdebug.dump.POST=*
   xdebug.dump.COOKIE=*
   xdebug.dump.SERVER=SCRIPT_FILENAME,REMOTE_ADDR

Es es un ejemplo de la salida

Screen Shot 2013-02-20 at 9.27.40 PM

Configuraciones 脷tiles

Lo interesante es tener esta informaci贸n de las super globales y de los par谩metros que se pasaron a las funciones del stack trace cuando surja un mensaje de error. Si usamos esta configuracion, o similar,

 xdebug.show_local_vars=On ;Muestra las variables locales del ultimo scope
 xdebug.dump.SERVER=HTTP_HOST, SERVER_NAME ;Configuracion para dump_super global
 xdebug.dump_globals=On
 xdebug.collect_params=4

podremos tener una salida de error como la de la imagen

var_dump_full

La teor铆a dice que las variables superglobales, salvo la de SESSION, no deber铆a cambiar durante la ejecuci贸n, por ende Xdebug por defecto muestra estas globales solo en el primer error para no ser tan verboso, si quieren que siempre se muestren pueden cambiar poner en off dump_once.

xdebug.dump_once=Off

Algo que suele ser interesante tambien es poder ver el stack trace cuando surge una excepcion, el problema es que las exceciones en PHP no son manejadas de la misma forma que los errores, ahora, si queremos que Xdebug no alerte en cada excepcion que suceda, capturada o no, podemos usar esta variable de configuracion.

xdebug.show_exception_trace=On

Conclusi贸n

Estas son algunas de las cosas avanzadas que pude ver para obtener mejores mensajes de error y tener un poco mas de informaci贸n en el var_dump, pero en realidad lo que me llevo a ver esto es que me puse a ver como hacer un poco mas completo los traces para poder ser mas efectivo debugeando, nunca fu铆 fan del Paso a Paso para debugear, asi que el pr贸ximo articulo estar谩 relacionado a como hacer traces efectivos en PHP con Xdebug para un mejor debugging.

Para los curiosos, aca esta la doc oficial

http://xdebug.org/docs/

Leave a Reply

Your email address will not be published. Required fields are marked *

*