2010-07-27 13 views
17

Con il supporto per il debug del dump in .NET 4.0 stiamo cercando automaticamente (dopo aver chiesto all'utente ovviamente :) la creazione di minidump del programma C# si blocca per caricarli nel nostro sistema di tracciamento dei problemi (in modo che i minidump possano aiutare a risolvere la causa dello schianto).Ridurre la dimensione dei minidump dei programmi gestiti mantenendo alcune informazioni sull'heap?

Tutto funziona correttamente quando si utilizza il tipo di minidump WithFullMemory. Possiamo vedere sia le variabili stack che heap. Sfortunatamente i dump (zippati) sono abbastanza grandi anche per i piccoli programmi C#.

Se si utilizza il tipo di minidump "Normale", si ottiene un dump molto piccolo, ma nemmeno le informazioni di stack stack sono disponibili nel debugger gestito. In realtà, qualcosa di meno di WithFullMemory sembra abbastanza inutile nel debugger gestito. Abbiamo fatto alcuni tentativi di utilizzare MINIDUMP_CALLBACK_ROUTINE per limitare le informazioni del modulo incluso ai nostri moduli, ma sembra che non abbia quasi alcun effetto su un dump gestito, ma riesce comunque a violare il debug gestito?

Qualcuno ha qualche consiglio su come tagliare il minidump mentre lo mantiene utile per il debug gestito?

risposta

0

ClrDump potrebbe aiutarti.

ClrDump è un set di strumenti che consentono di produrre piccoli minidump delle applicazioni gestite . In passato, era necessario utilizzare i dump completi (di dimensioni molto grandi) se fosse necessario eseguire l'analisi post-mortem di un'applicazione .NET. ClrDump può produrre piccoli minidump che contengono informazioni sufficienti per recuperare gli stack di chiamata di tutti i thread nell'applicazione .

1

Solo fyi, come già detto ClrDump sembra molto bello ma sembra funzionare solo con il 1.1. e 2,0 runtime.

1

Con tutto il rispetto, FORTEMENTE vi incoraggio a registrarvi per un account Microsoft WinQual, registrare le vostre applicazioni con Microsoft.

http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx

Questo vi permetterà di usufruire di un'ampia gamma di servizi di raccolta e analisi di crash di Microsoft non solo (gratuitamente!), Ma permetterà anche di pubblicare correzioni e le patch per le applicazioni attraverso incorporato Windows' nei servizi di segnalazione degli errori.

Inoltre, partecipando al programma WinQual, le aziende che implementano la tua app e che utilizzano un sistema interno di segnalazione errori di Windows saranno in grado di raccogliere, segnalare e ricevere patch anche per la tua app.

Un altro vantaggio è che utilizzando WinQual, sei un passo avanti per ottenere la certificazione del logo dell'app!

Ogni OEM & ISV Ho lavorato con chi usa WinQual per risparmiare un ENORME ammontare di sforzi e spese rispetto alla rotazione del proprio sistema di raccolta e segnalazione degli arresti anomali.

+0

Per quanto supporto WinQual: Microsoft ha ancora una brutta reputazione con molti utenti in termini di privacy. Conosco un sacco di persone che non manderebbero mai uno di quei crash dump mentre li manderebbero volentieri direttamente allo sviluppatore. A volte, l'emozione trionfa sugli argomenti e la rotazione della tua raccolta di crash è la strada da percorrere. Ma ciò dipende dal pubblico di destinazione dell'app. –

+0

1) La maggior parte delle persone non si preoccupa abbastanza di avere un'opinione sulla reputazione di Microsoft 2) Molti utenti preferiscono inviare un dump di arresto anomalo a Microsoft piuttosto che a una società/entità che non riconoscono, conoscono o si fidano. 3) MOLTO malware infastidisce i dati dell'utente facendo spuntare un messaggio di avviso che l'utente colpisce e quindi autorizza UAC. La prossima cosa che sanno, il computer dell'utente non si avvierà poiché sono stati infettati dal malware installato. 90% delle volte, è meglio supportare l'infrastruttura di segnalazione degli errori integrata del sistema operativo. –

+0

Grazie per il suggerimento, ma WinQual non è rilevante per noi. – Ziphnor

3

Io uso i seguenti flag per risparmiare spazio si genera minidumps utili per applicazioni C++:

MiniDumpWithPrivateReadWriteMemory | 
      MiniDumpWithDataSegs | 
      MiniDumpWithHandleData | 
      MiniDumpWithFullMemoryInfo | 
      MiniDumpWithThreadInfo | 
      MiniDumpWithUnloadedModules 

La bandiera valori sono specificati in DbgHelp.h e avrebbe bisogno di essere marshalling in C#. Il dump è ulteriormente limitato specificando un CallbackRoutine.

Problemi correlati