risposta

66

È un concetto di debug. Fondamentalmente eccezioni sono gettati al debugger prima e poi al programma vero e proprio, dove se non viene gestito tutto si butta al debugger una seconda volta, dandovi la possibilità di fare qualcosa con esso in vostro IDE prima e dopo l'applicazione stessa. Questa sembra essere un'invenzione di Microsoft Visual Studio.

+16

È più che un concetto di debug; C# non fornisce un mezzo conveniente per osservare la gestione delle eccezioni a due passaggi in fase di esecuzione, ma vb.net lo fa. Fondamentalmente, quando viene lanciata un'eccezione, il tempo di esecuzione inizia cercando lo stack di chiamate per scoprire chi se lo sta prendendo. Questo processo ha luogo * prima che * vengano eseguiti tutti i blocchi 'finally'. Una volta che il sistema ha deciso chi ha intenzione di rilevare un'eccezione (e ha determinato che qualcuno sta per farlo), il sistema inizierà a srotolare lo stack. Nota che se un'eccezione viene lanciata da un blocco 'finally' ... – supercat

+13

... il codice che si aspettava di catturare l'eccezione originale potrebbe finire per non farlo; ci sono molti casi d'angolo strani. – supercat

+4

Questo accade quando il debugger è stato configurato per interrompere tutte le eccezioni _thrown_ (non solo le eccezioni non gestite), o se "si passa" a qualche istruzione che genera.Viene visualizzato il messaggio ** Si è verificata una prima eccezione di tipo "pippo" in YourApp.exe **. È ancora possibile continuare (F5) o avanzare ulteriormente (F11). Quindi se c'è un 'catch 'per questo, il controllo va lì. Se non c'è un blocco 'catch', si ottiene l'interruzione di" seconda opportunità ", questa volta il messaggio è ** Un'eccezione non gestita di tipo 'pippo' si è verificata in YourApp.exe **. Da qui, il tentativo di continuare o di avanzare ulteriormente non avrà successo. –

15

Le prime notifiche di eccezioni di probabilità vengono generate quando viene generata un'eccezione. Le notifiche di seconda possibilità sono quando non viene catturato. (Possibilità - come in opportunità di penetrare nel codice nel debugger).

First and second chance exception handling

4

Ho appena iniziato a utilizzare il debugger e corse in questo. Nella mia ricerca, ho trovato il post del blog MSDN What is a First Chance Exception? che ha chiarito per me.

I grandi suggerimenti del post di blog per me sono che si riferisce alla notifica al debugger e non a qualcosa che il mio codice dovrebbe necessariamente gestire e, soprattutto, "I messaggi di eccezioni di prima scelta più spesso non significano che ci sia un problema nel codice. "

+0

Per favore metti un estratto (* non l'intero articolo *) di ciò che hai trovato utile da quel collegamento. C'era un link precedente che rispondeva solo con lo stesso link che è stato cancellato. –

+0

I grandi suggerimenti per me sono che si riferisce alla notifica al debugger, e non a qualcosa che il mio codice dovrebbe necessariamente gestire, e, soprattutto, "I messaggi di prima eccezione spesso non significano che ci sia un problema nel codice." – codingatty

+0

Ho aggiunto il tuo commento alla tua risposta, ritengo che il collegamento sia abbastanza importante da tenere in giro, sto cercando di assicurarmi che non sia considerato un link che risponda solo come la volta precedente che è stata data. –

0

Quando un'applicazione esegue il debug, il debugger viene avvisato ogni volta che si verifica un'eccezione. A questo punto, l'applicazione viene sospesa e il debugger decide come gestire l'eccezione. Il primo passaggio attraverso questo meccanismo è chiamato un'eccezione di "prima possibilità".

A seconda della configurazione del debugger, riprenderà l'applicazione e passerà l'eccezione o lascerà l'applicazione sospesa e entrerà in modalità di debug. Se l'applicazione gestisce l'eccezione, continua a funzionare normalmente.

I messaggi di eccezione per la prima volta più spesso non significano che ci sia un problema nel codice. Per le applicazioni/i componenti che gestiscono le eccezioni con garbo, i messaggi di eccezioni di prima scelta consentono allo sviluppatore di sapere che è stata rilevata una situazione eccezionale ed è stata gestita.

0

Dal punto di vista dello sviluppatore, si tratta più di un'eccezione di seconda possibilità, perché significherebbe non è stata gestita nel codice; quindi l'applicazione si fermerebbe.

La prima possibilità potrebbe essere molte, ma quelle su cui preoccuparsi di più, ancora una volta, da una prospettiva di sviluppo, sono una seconda possibilità, perché porterebbe a un arresto anomalo dell'applicazione.

Problemi correlati