Come eseguire il debug di un programma quando si blocca w/out eccezione?

Uno dei miei programmi si blocca periodicamente, ma non so perché. Io sono in esecuzione in modalità di debug, ma niente si apre. Il programma appena improvvisamente esce. Ho avuto altri bug che gettano un’eccezione…ma non questo. C’è un modo magico di cattura o qualcosa del genere?

InformationsquelleAutor mpen | 2010-09-25



2 Replies
  1. 8

    Presumibilmente si sta eseguendo che dall’interno di Visual Studio e per qualche motivo questo non ferma il debugger con un’eccezione non rilevata, nel qual caso si potrebbe provare a prendere il crash da fuori di Visual Studio. Vedi la mia risposta a Sistema.Tipo accessviolationexception da codice non gestito?, in particolare come per l’acquisizione di un dump di arresto anomalo.

    Se solo si blocca periodicamente, e comunque entro un termine ragionevolmente breve, iniziare con Sysinternals procdump. Avviare il file eseguibile da esterno di Visual Studio, quindi:

    procdump -e <YourExecutableNameOrPid>

    e attendere che la raccolta di un crash dump – supponendo che esce a causa di un’eccezione non gestita – poi caricare il dump di arresto anomalo in VS 2010 o WinDbg.

    • che cosa fare se si dispone di un tipo accessviolationexception in un .Rete 4 app che in realtà colpisce un blocco catch in modo imprevisto? Sì, questo sta realmente accadendo a me in questo momento. Non riusciva a credere di me. Programma per chiedere un separato StackOverflow domanda, ma ho letto questa risposta di prima. Perché l’applicazione non va in crash, non c’è nessun crash dump per prendere, giusto?
    • Vorrei fallback per il debug con WinDbg e SOS[EX]. Vedi altra mia risposta linkato sopra.
    • Grazie, ho descritto il mio problema in dettaglio qui: stackoverflow.com/questions/39378849/…
  2. 4

    Il programma appena improvvisamente esce

    sicuramente controllare che il codice, o in una delle librerie che si utilizza, non chiama exit() (sì, sì, sì, potrebbe sembrare troppo semplice, ma una volta abbiamo perso ore di analisi programmi casuali arresti indietro per uscire() chiama..). Se è così, mettere un punto di interruzione o modifica di passi(), quindi eseguire di nuovo. Se non, Sean risposta sembra legit.

    • Abbiamo avuto questo problema esatto una volta e ci sono voluti secoli per capire. Vale la pena di controllare per.
    • Inoltre, si dovrebbe impostare un punto di interruzione o di qualche istruzione del registro come ultima riga della funzione main() / winmain(). Forse il programma termina in modo “normale”, quindi in un modo inaspettato.
    • Si tratta di un WPF applicazione GUI… tutto il codice è in eventi, penso che non dovrebbe mai raggiungere la fine. @stijn: Abbastanza sicuro di non scrivere in uscita chiamate, ma io a doppio controllo.

Lascia un commento