Rastreo de pila
En informática , un stack trace (traducido literalmente del inglés como "stack trace"), también llamado stack backtrace [1] o stack traceback [2] , es una lista de los marcos de pila activos en un momento dado durante la ejecución de un programa _ Cuando se ejecuta un programa, la memoria a menudo se asigna dinámicamente en dos ubicaciones: la pila y el montón . Técnicamente, una vez que se ha asignado un bloque de memoria en la pila, no se puede eliminar fácilmente, ya que puede haber otros bloques de memoria que se hayan asignado antes. Cada vez que se llama a una función en un programa, se asigna un bloque de memoria, llamado registro de activación (o puntero de pila), encima de la pila de tiempo de ejecución. En un nivel alto, un registro de activación asigna memoria para parámetros de función y variables locales declaradas en la función.
Un seguimiento de pila le permite rastrear la secuencia de funciones anidadas invocadas , hasta el punto donde se genera el seguimiento de pila. Esto es especialmente útil cuando la traza se genera como resultado de un error. Por esta razón, los programadores suelen utilizar el seguimiento de pila al depurar . A veces, incluso el usuario final puede ver un seguimiento de la pila como parte de un mensaje de error , que luego puede informar al programador.
Ejemplo
Tomemos, por ejemplo, el siguiente programa de Python que contiene un error:
def a ():
yo = 0
j = segundo ( yo )
volver j
definición b ( z ):
k = 5
si z == 0 :
do ()
volver k + z
def c ():
error ()
un ()
Ejecutar el programa con el intérprete estándar de Python produce el siguiente mensaje de error:
Rastreo (última llamada más reciente):
Archivo "tb.py" , línea 15 , en <módulo>
a ()
Archivo "tb.py" , línea 3 , en a
j = b ( i )
Archivo "tb.py" , línea 9 , en b
c ()
Archivo "tb.py" , línea 13 , en c
error ()
NameError : el nombre 'error' no está definido
El seguimiento de la pila muestra dónde ocurrió el error, que está en la función c. El mensaje también informa que la función cfue llamada por b, que fue llamada por a, que a su vez fue llamada por el código en la línea 15 (última) del programa.
Lenguajes de programación
Muchos lenguajes de programación, incluidos Java y C # , admiten de forma nativa la recuperación del seguimiento de la pila actual a través de llamadas al sistema adecuadas . C ++ no tiene soporte integrado para hacer esto, pero los programadores de C ++ pueden recuperar seguimientos de pila a través de bibliotecas dedicadas , como stacktrace . En JavaScript , las excepciones contienen una propiedad llamada stack(por lo tanto, invocable como err.stack) que contiene la pila desde el punto en que se lanzó; además, la mayoría de los navegadores modernos admiten llamadas console.trace();. [3]
Notas
- ^ Rastreos | _ _ La Biblioteca GNU C , en gnu.org . Consultado el 15 de diciembre de 2020 .
- ^ Rastreo : imprima o recupere un rastreo de pila en docs.python.org . Consultado el 15 de diciembre de 2020 .
- ^ Console.tracee ( ) - Web API § Compatibilidad con navegadores , en developer.mozilla.org , MDN . Consultado el 15 de diciembre de 2020 .
Artículos relacionados
- Contexto (TI)
- Desbordamiento de pila
- Manejo de excepciones