2009-08-27 13 views
10

Usando C++ con Visual Studio, me preguntaba si hay una API que imprima la pila de llamadas para mí. Preferiblemente, me gustaría imprimir una callstack de 5 niveles de profundidad. ¿Windows proporciona una API simple que me permita hacer esto?¿Imprime n niveles de callstack?

Respuesta

5

Hay varias formas de hacerlo.

Ver How to Log Stack Frames with Windows x64

En mi opinión, el más simple y así la forma más fiable es la función de la API de Win32:

USHORT WINAPI CaptureStackBackTrace(
    __in  ULONG FramesToSkip, 
    __in  ULONG FramesToCapture, 
    __out  PVOID *BackTrace, 
    __out_opt PULONG BackTraceHash 
); 

Este parámetro FramesToCapture, determina la profundidad máxima de pila de llamadas devueltas.

+0

Esto no genera ninguna información simbólica. ¿De qué sirve un montón de valores de puntero? –

+0

C/C++ Los programas nunca contienen información simbólica por defecto. Consulte aquí las formas de agregar símbolos a un volcado de pila: http://www.drdobbs.com/architecture-and-design/post-mortem-debugging-revisited/227900186 –

8

Parece que la biblioteca DbgHelp de Microsoft puede hacer lo que quiera. Consulte la documentación de la función StackWalk64 en MSDN para obtener más información. Además, this CodeProject article puede ser útil.

0

Tener un vistazo a la API Stackwalk y StackWalk64 de la API DbgHelp.

1

creo que usted puede conseguir que fuera de su API depurador (dbghelp).

Cuestiones relacionadas