Inicio > Internet, Programación, Webmasters > Seguir la pila de construcción (Stack Trace) de un Script en PHP / JS

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.

Advertisement
  1. Aún no hay comentarios.
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.