Blogs Media: CSS Mania | VivirLatino | Sentido Web | Apps Mania

Publicidad

Mié19Dic2007

Mostrar una traza recursiva con PHP

18:00 H (CET)| Temas: PHP

Una de las cosas que más me gusta de Java es que cuando se produce una excepción, el error que te muestra te saca una traza de toda la ejecución de procesos (qué función falla, en qué línea y qué funciones se han llamado hasta llegar a ese punto). En PHP a veces los errores son algo simples, falla tal cosa en tal línea.

Afortunadamente podemos mejorar los mensajes de debug para poder mostrar la misma información: línea del archivo, fichero y qué funciones han sido las que han llamado a la actual (backtrace).

Para poder realizarlo se ha de usar las variables __FILE__ y __LINE__ y la función debug_backtrace(). El código necesario sería el siguiente:

function debug($msg, $label = 'DEBUG', $stealth = FALSE) {
 
 if (defined('DEBUG') && DEBUG) {
   if (is_bool($msg)) {
      $msg = $msg ? 'TRUE' : 'FALSE';
   }
   $display = $stealth ? ' style="display: none;"' : '';
   $backtrace = debug_backtrace();
   $debug = array();
   $stack = (isset($backtrace[1]['class']) ? "{$backtrace[1]['class']}::" : '')
   	. (isset($backtrace[1]['function']) ? "{$backtrace[1]['function']}" : '');
   if ($stack) {
      $debug[] = $stack;
   }
   $debug[] = "Line {$backtrace[0]['line']} of {$backtrace[0]['file']}";
   $debug = implode('
', $debug); print "{$label}: {$debug}:
".print_r($msg, 1)." \n”; } }

Programming Tips #9 "debug_backtrace"

Relacionados

Feedback (2) » Formulario

1. Pedro ~ Jueves, 20 Dic 2007 | 10:59H:

Te comento desde IE pq desde Opera el bloque en el que se muestra el script php, se extiende hasta el final del html, dejando inutilizada la página. Por si quieres revisarlo.

Como siempre, muy buenos artículos! :)

2. Roberto ~ Miércoles, 16 Ene 2008 | 14:35H:

Hola. Soy programador y la verdad que me interesaria saber como hacer funcionar el codigo que nos has mostrado, ya que no lo he consegido. No se si sera por una directiva de php o de apache. Muchas gracias

Conversación

Nombre:

Email:

(no aparecerá)

URL:

(opcional)
¿Recordar datos?

↓ Comentarios (XHTML permitido)