2009-08-27 11 views
10

Utilizzando C++ con Visual Studio, mi chiedevo se c'è un'API che stamperà il callstack per me. Preferibilmente, mi piacerebbe stampare un callstack a 5 livelli di profondità. Windows fornisce una semplice API per consentirmi di farlo?Stampa n livelli di callstack?

risposta

5

C'è un numero di modi per farlo.

Vedi How to Log Stack Frames with Windows x64

A mio parere, il più semplice e pure il modo più affidabile è la funzione API Win32:

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

Questo parametro FramesToCapture, determina la profondità massima dello stack chiamata restituita.

+0

Questo non genera alcuna informazione simbolica. A che serve un mucchio di valori puntatore? –

+0

I programmi C/C++ non contengono mai informazioni simboliche per impostazione predefinita. Vedi qui per i modi per aggiungere simboli a una discarica di stack: http://www.drdobbs.com/architecture-and-design/post-mortem-debugging-revisited/227900186 –

8

Sembra che la libreria DbgHelp di Microsoft possa fare ciò che si desidera. Consultare la documentazione della funzione StackWalk64 su MSDN per ulteriori informazioni. Inoltre, this CodeProject article potrebbe essere utile.

0

Dai un'occhiata alle API Stackwalk e Stackwalk64 dell'API DbgHelp.

1

Credo che si possa ottenere dall'API debugger (dbghelp).