2009-10-10 4 views
26

Non riesco a creare il modulo minidump nel mio processo modificando le impostazioni di sistema. Quindi la mia domanda è :Come creare il minidump per il mio processo quando si blocca?

  • Intende il sistema di creare un minidump per un processo utente quando si blocca

    Se sì, quale impostazione devo configurare

  • O devo crea il minidump a livello di codice.

  • Quanto sono efficaci minidumps mentre indaga un incidente

Sto usando Windows XP, C++, VC6

+0

È sempre possibile combinare try-catch e fstream per creare il proprio minidump. –

risposta

25

È necessario creare programatically un minidump (con una sola eccezione, vedi il prossimo link) . CodeProject ha un bel article on MiniDumps. In pratica, si desidera utilizzare dbghelp.dll e utilizzare la funzione MiniDumpWriteDump() (vedere MSDN on MiniDumpWriteDump).

L'efficacia di tali discariche dipende molto dall'applicazione. A volte, per i binari ottimizzati, sono praticamente inutili. Inoltre, senza esperienza, gli errori di corruzione heap/stack ti porteranno fuori strada.

Tuttavia, se l'ottimizzatore non è stato troppo duro con te, c'è una grande classe di errori in cui le discariche fanno aiuto, vale a dire tutti i bug dove avere uno stack-trace + valori delle variabili utilizzate a livello locale è utile , vale a dire molte cose di chiamata a pura funzione virtuale (ovvero ordine di distruzione errato), violazioni di accesso (assegni non inizializzati o assenti NULL mancanti), ecc.

BTW, se la politica di manutenzione lo consente in qualche modo, trasferire l'applicazione da VC6 a qualcosa di accettabile, come VC8 o 9. Ti farai un grande favore.

1

Se si dispone di un paio di dollari per risparmiare AQtrace potrebbe valere la pena dare un'occhiata a. Questo ha molti dei vantaggi del crash che si verificano all'interno del debugger, mentre è in esecuzione su un computer remoto.

14

Grazie a tutti per la visualizzazione e la risposta di ringraziamenti speciali a gimpf, ho cercato su google su internet e msdn.

Ho trovato un ottimo articolo su debugInfo.com Questo vale la pena di leggere:

effective minidumps

+0

Intendi: su Google? –

+0

@MatthewRoh sì, corretto – Satbir

3

Usiamo Google Breakpad in Firefox, anche se questo richiede almeno Visual C++ 2003. Il beneficio di lato bello è che supporta anche OS X e Linux.

2

Ho finito per utilizzare CrashRpt su Windows (mi è stato richiesto di spostare l'intero codebase e toolchain da MinGW al compilatore nativo di Microsoft C/C++) e google-breakpad su Linux.