Programación General > Visual C++
Pila De Llamadas / Call Stack
(1/1)
diego.martinez:
Buenas:
Estoy intentando hacer un gestor de errores del codigo, y me preguntaba, (no se si estoy preguntando una burrada):
hay alguna forma de accesar el contenido de la pila de llamadas (call stack),
tal que al llamar a una funcion me indique por que funciones ha pasado?
un ejemplo de lo que querria seria:
void func1()
{
func2();
}
void func2()
{
func3();
}
void func3()
{
escribe_pila();
}
y el resultado :
xxxx:xxxx func3
xxxx:xxxx func2
xxxx:xxxx func1
ya se que seguramente tendria que hacer una tabla con pseudonimos para las direcciones de las funciones y comparar las direcciones de la pila con la tabla para identificarlas, pero ¿es posible acceder a la pila?.
Inmagino que acceder a ella tendra el problema intrinseco de afectar a la propia pila en la llamada...
pd: gracias por adelantado como siempre
Eternal Idol:
Busca en Google por "walking the stack", tenes que comprender como se estructura la pila y los registros fundamentales (esp y ebp). Pero esto no es algo completamente FIABLE, hay funciones que construyen marcos de pila (con ebp) y otras que no, depende del compilador y su configuracion. Hay funciones de la API de Windows por ahi pero ahora no me acuerdo si servian para x86 o solo para x64.
diego.martinez:
muchisimas gracias, con "walking the stack" ya lo he encontrado. :)
parece que hay una funcion que lo hace tal como queria y todo.
http://www.codeproject.com/threads/StackWalker.asp
Navegación
Ir a la versión completa