2010-06-09 14 views
5

La mia applicazione lancia InvalidCastException nell'ambiente QA, qualcosa che non riesco a riprodurre in fase di sviluppo.Come creare il minidump di un processo .NET quando si verifica una certa eccezione di prima opportunità

Desidero ottenere il minidump nel momento eccezionale. Conosco l'adplus, ma non sono sicuro di come usarlo in modo tale da creare il minidump quando viene lanciata InvalidCastException. Apparentemente, non distingue una eccezione .NET da un'altra. Può essere che ho torto e c'è un modo. O c'è un altro strumento per farlo. Preferibilmente uno libero.

In ogni caso, qualcuno può consigliare come gestire questo problema?

Grazie.

UPDATE

  1. La build è una build di debug sia in QA e dev. Tuttavia, il controllo qualità esegue scenari complessi resi possibili in laboratorio, che gli sviluppatori non possono riprodurre. Quindi ho bisogno di una capacità per fare il dump durante l'esecuzione in QA.
  2. Posso modificare il codice e creare il minidump dal codice. Tuttavia, desidero una soluzione più flessibile, quella che non richiede di modificare il codice ogni volta che si verifica un problema come questo.

UPDATE 2

In realtà, ho "rubato" la generazione del codice minidump da John Robbins SuperAssert.Net Ancora una volta, questo è il codice per la generazione di minidump dal certo punto concreto, mentre ho bisogno di un più flessibile approccio nello stile dell'aggiunta. L'approccio di John Robbins è creare uno script cdb e quindi richiamare il debugger cdb con quello script per farlo associare al processo e creare il dump. Non utilizza l'API MiniDumpWriteDump.

+0

una domanda veloce - avete la riga di codice in cui il cast sta accadendo?L'ambiente QA è compilato in modalità 'Rilascio' piuttosto che in modalità 'Debug'? – Paddy

+0

L'ambiente di QA è lo stesso di dev per quanto riguarda la build. Ciò che importa è che l'ambiente QA sia distribuito, mentre gli sviluppatori eseguono tutto sulla stessa macchina. – mark

risposta

5

Il modo più semplice è di farlo uscire completamente dall'app, lasciare che l'utente lo segnalhi a Microsoft e iscriversi a Segnalazione errori di Windows.

In alternativa, è possibile acquisirlo manualmente utilizzando SUPERASSERT .NET (o un sottoinsieme del suo codice) di John Robbins.

UPDATE (per soluzione non codificata): Dai un'occhiata a Systems Internals ProcDump.

+0

Il fatto è che ho bisogno di una soluzione non interattiva e ne ho bisogno ora. – mark

+0

Considera la mia seconda soluzione, quindi. Prendere un minidump del processo attualmente in esecuzione non è banale, quindi ti consiglio di usare solo il codice di John Robbins. –

+0

In realtà, ho "rubato" il codice di generazione del minidump da John robbins SuperAssert.Net Ancora, questo è il codice per generare il minidump da un certo punto concreto, mentre ho bisogno di un approccio più flessibile nello stile dell'aggiunta – mark

2

È possibile, è necessario caricare sos.dll nello script ADPlus. Questo blog post mostra come.

Attenzione alle gioie discutibili del codice gestito di debugging da un minidump. Se stai eseguendo eccezioni difficili da diagnosticare mentre è ancora in QA, lo eseguirai di nuovo quando entrerà in produzione. Con i draghi sputa fuoco aggiunto allora. Prenditi cura di una buona registrazione delle eccezioni non gestita scrivendo un gestore di eventi per AppDomain.UnhandledException. La registrazione e.ExceptionObject.ToString() fornisce una grande quantità di informazioni.

Problemi correlati