2011-10-03 10 views
9

Ho bisogno di un modo per registrare la traccia dello stack delle funzioni in un registro di debug per aiutarmi a diagnosticare un difetto. Il problema è che ho bisogno di implementarlo su Windows e Linux usando C++.Libreria per la registrazione di Call Stack in fase di esecuzione (Windows/Linux)

Dopo una piccola ricerca, ho scoperto che:

  • Per l'implementazione di Windows, posso usare StackWalk64 funzione API e la famiglia.
  • Sotto Linux, ho trovato libunwind che suona alla grande.
  • Oppure, posso usare di backtrace

glibc Prima di iniziare il lavoro, voglio qualche consiglio se questo è il modo giusto e per chiedere se v'è una libreria multipiattaforma già scritto che può aiutare. Sospetto di non essere il primo programmatore che ha bisogno di questo. :)

+0

+1 per una buona domanda ben ha chiesto! –

risposta

3

Google Breakpad gestisce tutto questo per te se vuoi ottenere arresti anomali dal campo.

+1

Un crash dump contiene molte più informazioni di cui ho bisogno. E dovrebbe essere post-elaborato - questo è un grosso inconveniente. Ho semplicemente bisogno della traccia dello stack come stringa o array di stringhe. – vlg789

+0

Devi postelaborare se non sei disposto a spedire PDB privati ​​insieme alla tua app, e un minidump ha le dimensioni di un grande JPEG. –

+0

spedizione PDB privati ​​non è un problema. – vlg789

1

alcuni anni fa ho scritto questo: http://drdobbs.com/cpp/191100567

Fondamentalmente alcune macro registrare il luogo in cui la pila di svolgimento si verifica quando un'eccezione viene lanciato

Una versione aggiornata del quadro può essere trovata nella biblioteca Imebra (http://imebra.com)

+0

ti riferisci alle macro FUNCTION_START/FUNCTION_END? – vlg789

+0

Sì. Catturano e rilanciano e registrano il passaggio dell'eccezione. –

Problemi correlati