SoloCodigo
Programación General => C/C++ => Visual C++ => Mensaje iniciado por: diego.martinez en Jueves 30 de Noviembre de 2006, 18:08
-
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
-
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.
-
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 (http://www.codeproject.com/threads/StackWalker.asp)