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?
10
A
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.
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).
Problemi correlati
- 1. echo "-n" non stampa -n?
- 2. stampa manuale di un intero N-byte
- 3. Strumento PHP Callstack
- 4. callstack? retainstack? namestack?
- 5. Ottenere un callstack in Clojure
- 6. Stampa caratteri n spazio - (f) formato printf
- 7. Livelli di omosessualità
- 8. Interrompere la stampa dopo n numero di linee
- 9. Python - stringa di stampa a schermo, include \ n in uscita
- 10. Come posso ottenere un callstack in Haskell?
- 11. La chiamata a setTimeout cancella il callstack?
- 12. Come ottenere un callstack dall'output oprofile?
- 13. Sostituzione "\ r \ n" con "\ n"
- 14. Sostituire valore nel file di JSON per la chiave che può essere annidato da n livelli
- 15. Livelli di registrazione Android
- 16. QWebView: problemi di stampa
- 17. Stampa di un Char *
- 18. Architettura a 3 livelli - passaggio di dati tra i livelli
- 19. Qual è la prova di (N-1) + (N-2) + (N-3) + ... + 1 = N * (N-1)/2
- 20. Camminare su un callstack .NET utilizzando C++ nativo
- 21. Stampa solo output di stampa con SML/NJ
- 22. Copia di modelli tra livelli
- 23. Android - Mic livelli di input?
- 24. Livelli di registrazione livello graduazione
- 25. Livelli di isolamento in oracolo
- 26. cosa fa cout << "\ n" [a == N]; fare?
- 27. n ** n ** n euristica in Python
- 28. Scala: sliding (N, N) vs grouped (N)
- 29. Stampa in ordine di terminazione?
- 30. lista tutti i livelli di fattore di un data.frame
Questo non genera alcuna informazione simbolica. A che serve un mucchio di valori puntatore? –
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 –