Pregunta

Quiero ver el seguimiento de la pila en cualquier función de mi código, así que hice algo así para llamarlo e imprimir el seguimiento de la pila:

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}

Me gusta saber si hay otra manera de hacer esto. En algún lugar, la clase Error crea el seguimiento de la pila, pero tal vez no lo hizo con ActionScript 3.0, por lo que tal vez no sea posible, pero quiero saberlo.

¡Gracias!

¿Fue útil?

Solución

Por lo que sé, la única forma de hacer que el seguimiento de la pila esté disponible para su propio código es a través de getStackTrace () en la clase Error, como ya lo está haciendo. Sin embargo, en respuesta al ejemplo de tu pregunta, mencionaría que en realidad no tienes que lanzar el Error, puedes crearlo y usar el método:

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

Además, como dice la documentación, esto solo funciona en la versión de depuración de Flash Player, por lo que puede envolver esta funcionalidad en un bloque if que verifique el valor de Capabilities.isDebugger si lo desea.

Otros consejos

Desde Flash Player 11.5, los rastros de pila también están disponibles en las versiones no depuradoras de los jugadores.

Use el Flex DeBugger (FDB) que viene con el SDK de Flex. Es un depurador de línea de comandos que le permite depurar .swf, incluso en línea (si es una versión de depuración). Le permite establecer puntos de interrupción, imprimir / cambiar variables y volcar la pila, y no requiere que agregue ningún código adicional . ¡Una herramienta muy útil de la que no deberías estar!

Las opciones de fdb que necesitará son 'break' y para especificar la clase y la línea donde desea que se detenga la ejecución, y 'bt' o 'info stack' para darle un seguimiento de la pila. También puede mostrar casi todo sobre la aplicación mientras se ejecuta.

@hasseg tiene razón. También puede conservar la información de stacktrace en la versión de lanzamiento (no depurar) proporcionando el -compiler.verbose-stacktraces = true al compilar su SWF.

He reunido esta pequeña función:

public static function getStackTrace() : String
{
    var aStackTrace : Array = new Error().getStackTrace().split("\n");
    aStackTrace.shift();
    aStackTrace.shift();
    return "Stack trace: \n" + aStackTrace.join("\n");
}

Tengo esta función en una personalizada " Depurar " Clase que utilizo con mis aplicaciones al desarrollar. Las dos llamadas a shift () eliminan las primeras dos líneas: la primera es solo la cadena " Error " y la segunda línea se refiere a esta función en sí misma, por lo que no es útil. Incluso puede eliminar la tercera línea si lo desea (se refiere a la línea en la que realiza la llamada a la función getStackTrace ()) agregando otra llamada shift (), pero la dejé para que sirva como punto de partida de " seguimiento de la pila " ;.

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

escriba esta cadena stackTrace en cualquier archivo para que también pueda ver los registros de su programa en el modo de ejecución. Por lo tanto, no es necesario ejecutarlo solo en modo depurador. Escríbalo en el evento uncaughtexception de la aplicación, por lo que se ejecutará por último.

A partir de Flash 11.5, los seguimientos de pila funcionan en la versión de lanzamiento de Flash.

Sin embargo, eso no significa que ya no sea un problema. Si su aplicación está configurada para usar un compilador anterior a 11.5 en Flash Builder - > Propiedades del proyecto - > Compilador de ActionScript , no tendrá trazas de pila.

Además, en esa misma página puede ver su versión de AIR SDK. Si está utilizando v3.4 o más antiguo, no verá los seguimientos de pila. Si este es su problema, todos los desarrolladores deben actualizar su SDK de AIR siguiendo las instrucciones here .

El método getStackTrace devuelve el seguimiento de la pila solo en el debug flash player ( https://www.adobe.com/support/flashplayer/debug_downloads.html ), en el reproductor de lanzamientos devuelve null . Asegúrese de tener el reproductor de depuración instalado y ejecutándose.

El -compiler.verbose-stacktraces = true solo agrega el número de línea al seguimiento de la pila de depuración.

Prueba de muestra: https://gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top