2010-09-25 11 views

risposta

8

Presumibilmente lo stai eseguendo da Visual Studio e per qualche motivo non si ferma nel debugger con un'eccezione non rilevata, nel qual caso puoi provare a catturare l'arresto anomalo dall'esterno di Visual Studio. Vedere la mia risposta allo System.AccessViolationException from unmanaged code?, in particolare how to capture a crash dump.

Se si arresta solo periodicamente, ma entro un periodo di tempo ragionevolmente breve, iniziare con Sysinternals procdump. Avviare il file eseguibile dall'esterno Visual Studio, quindi eseguire:

procdump -e <YourExecutableNameOrPid> 

e attendere che per raccogliere un crash dump - ammesso che esce a causa di un'eccezione non gestita - quindi caricare il crash dump in VS 2010 o WinDbg.

+0

Cosa fai se disponi di AccessViolationException in un'app .NET 4 che colpisce in modo imprevisto un blocco catch? Sì, mi sta davvero succedendo proprio ora. Non potevo crederci da solo. Pianificare di porre una domanda separata su StackOverflow, ma prima di tutto leggo questa risposta. Poiché l'applicazione non si arresta in modo anomalo, non è necessario eseguire il dump di arresto anomalo, giusto? –

+1

@JohnZabroski Mi piacerebbe ricorrere al debugging con WinDbg e SOS [EX]. Vedi la mia altra risposta collegata a sopra. –

+0

Grazie, ho descritto il mio problema in dettaglio qui: http://stackoverflow.com/questions/39378849/what-to-do-when-accessviolationexception-in-net-4-app-defies-msdn-documented-be –

4

Il programma appena esce improvvisamente

sicuramente verificare che il codice, o di una delle librerie in uso, non chiama exit() (sì potrebbe sembrare troppo semplice, ma noi ore una volta perse tracing arresti di programmi casuali ritorno a chiamate exit() ..). In tal caso, inserire un punto di interruzione o passare a throw(), quindi eseguire di nuovo. In caso contrario, la risposta di Sean sembra legittima.

+0

We ha avuto questo problema esatto una volta e ci sono voluti anni per capire. Vale la pena controllare. –

+0

Inoltre, è necessario impostare un punto di interruzione o qualche istruzione di registro come ultima riga in main()/winmain(). Forse il programma termina "normalmente" quindi in modo inaspettato. –

+0

@Red: È un'app della GUI WPF ... tutto il codice è in eventi, non penso che dovrebbe mai arrivare alla fine. @stijn: Abbastanza sicuro di non aver scritto nessuna chiamata di uscita, ma controllerò due volte. – mpen

Problemi correlati