Seguir la pila de construcción (Stack Trace) de un Script en PHP / JS
Para los que no lo saben, el Seguimiento de Pila (Stack Trace) consiste en conocer la ruta que ha seguido un Script o Aplicación hasta llegar a un punto específico. Algo muy útil si en algún momento hemos deseado conocer el lugar desde donde se está llamando una función que genera problemas o saber qué Scritpt está inncluyendo otro….etc.
El Seguimiento de Pila se puede realizar con PHP o Javascript.
Para PHP usamos dos funciones, la primera es debug_print_backtrace() que lo que hace es imprimir la pila de construcción, y debug_backtrace() que retorna la pila para que manualmente sea impresa más adelante.
Veamos un Ejm, supóngase el siguiente código:
<?php
class Test
{
public function __construct(){
echo "-- Constructor -- "."\n";
$x = 4;
$y = 7;
$this->sumItems($x, $y);
}
public function sumItems($x = 0, $y = 0){
echo "Suma: ".($x + $y)."\n\n";
echo "Debug Print Backtrace:\n";
- debug_print_backtrace();
echo "\n";
echo "Debug Backtrace:\n";
print_r(debug_backtrace());
}
}
$test = new Test;
Vemos en el Script, una clase llamada Test, con un Constructor, dentro del cual se hace un llamado a otra función llamada sumItems() que recibe dos parámetros ($x y $y) y luego los suma. Dentro de ésta función se efectúa la ejecución de las dos funciones de Seguimiento de Pila
Si ejecutamos el Script, tendremos un resultado como este:
-- Constructor --
Suma: 11
Debug Print Backtrace:
#0 Test->sumItems(4, 7) called at [/home/Yefb/Webdevel/Tests/posts/backtrace.php:9]
#1 Test->__construct() called at [/home/Yefb/Webdevel/Tests/posts/backtrace.php:22]
Debug Backtrace:
Array
(
[0] => Array
(
[file] => /home/Yefb/Webdevel/Tests/posts/backtrace.php
[line] => 9
[function] => sumItems
[class] => Test
[object] => Test Object
(
)
[type] => ->
[args] => Array
(
[0] => 4
[1] => 7
)
)
[1] => Array
(
[file] => /home/Yefb/Webdevel/Tests/posts/backtrace.php
[line] => 22
[function] => __construct
[class] => Test
[object] => Test Object
(
)
[type] => ->
[args] => Array
(
)
)
)
Fijémonos:
En el primer bloque encontramos las impresiones que se efectúan a lo largo del Script.
En el segundo bloque vemos el resultado de la función debug_print_backtrace() en el cual vemos cómo en dos pasos el Script llega hasta la función sumItems, especificando desde dónde se han llamado las funciones y qué parámetros se le han pasado.
En el tercer Bloque, vemos el resultado de imprimir con print_r() el resultado de la función debug_backtrace(). Como vemos es más detallado que el primero, ya dependerá de tus necesidades cuál usar.
Para hacer ésto con Javascript, tendremos que hacer uso de la consola de Firebug y/o Google Chrome, y ejecutar la función console.trace().
Veamos un Ejemplo:
function backtrace(){
var item = 'Item';
backtrace2(item);
}
function backtrace2(item){
console.log(arguments);
console.trace();
}
backtrace();
Dicho código hace casi lo mismo que el ejemplo en PHP.
Acá tenemos la respuesta:
["Item"] backtracejs.js (línea 7) backtrace()backtracejs.js (línea 3) backtracejs.js()backtracejs.js (línea 11)
En la primera línea de la impresión (["Item"]) tenemos la respuesta de ejecutar console.log(arguments), y luego tenemos el resultado de ejecutar console.trace(), es decir la pila de construcción del Script.




