Cuentos y tecnologia

viernes, 11 de marzo de 2016

Lo que aprendí en el camino PHP backtrace

Yo era un alegre programador de JAVA que trabajaba 12 horas al día (lo normal) cuando nació mi hijo.
Pocos meses después, cuando ya era capaz de reconocer a su mamá pero no a mi, decidí cambiar de empleo: uno que me diera más tiempo para estar con el.

La únicas opciones que encontré fueron programando en PHP. Como es muy parecido al C, con el que todos los ingenieros de mi generación aprendimos a programar, no me fue muy difícil adaptarme.

Aunque en varios sentidos PHP es un lenguaje inferior a JAVA, (dejen a alguien que hace código sucio trabajar en PHP) tiene algunas ventajas que lo compensan.

Lo único que extrañé de JAVA fueron sus capacidades de debugging. Las personas que me enseñaron los pormenores del PHP, usaban decenas de echos para mostrar el contenido de las variables de forma ambigua.

Esto era normal: usábamos PHP 4.3 y las opciones no eran muchas.

Varios años después descubrí que las nuevas versiones del lenguaje incluyen stacktracers. Como muchos de mis colaboradores, buenos programadores muy capaces desconocen estas, hoy quiero hablar de debug_backtrace() una de las funciones de PHP más utiles y desconocidas con que me he topado.

La función acepta argumentos como el numero de línea de código, apuntadores a funciones que van a ser debugeadas, nombres de archivos con scripts.php, y hasta un limite de stacktraces, por si el error esta muy profundo y queremos ahorrar memoria.
Un ouput comun de este (o su analogo con salida a pantalla, debug_print_backtrace() es:

array(2) {
[0]=>
array(4) {
    ["file"] => string(10) "/tmp/a.php"
    ["line"] => int(10)
    ["function"] => string(10) "una_prueba"
    ["args"]=>
    array(1) {
      [0] => &string(5) "amigo"
    }
}
[1]=>
array(4) {
    ["file"] => string(10) "/tmp/b.php"
    ["line"] => int(2)
    ["args"] =>
    array(1) {
      [0] => string(10) "/tmp/a.php"
    }
    ["function"] => string(12) "include_once"
  }
}
La documentación en español esta aquí: debug_backtrace()
¡Cuentame tu experiencia usandolo!
PHP backtrace
Share:

0 reseñas:

Publicar un comentario