Che cos'è una "prima eccezione"?


Risposte:


78

È 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 un secondo tempo, dando una possibilità di fare qualcosa con esso in vostro IDE, prima e dopo l'applicazione stessa. Sembra essere un'invenzione di Microsoft Visual Studio.


21
È più di un concetto di debug; C # non fornisce un mezzo conveniente per osservare la gestione delle eccezioni in due passaggi in fase di esecuzione, ma vb.net lo fa. Fondamentalmente, quando viene lanciata un'eccezione, il runtime inizia cercando nello stack di chiamate per scoprire chi, se qualcuno, lo catturerà. Questo processo avviene prima che i finallyblocchi vengano eseguiti. Una volta che il sistema ha deciso chi prenderà un'eccezione (e determinato che qualcuno lo farà effettivamente), il sistema inizierà a srotolare lo stack. Nota che se viene lanciata un'eccezione da un finallyblocco ...
supercat

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

5
Questo accade quando hai configurato il debugger per interrompere tutte le eccezioni generate (non solo eccezioni non gestite), o se "passi" in qualche istruzione che genera. Viene visualizzato il messaggio Si è verificata una prima eccezione di tipo "foo" in YourApp.exe . È ancora possibile continuare (F5) o andare oltre (F11). Quindi se c'è un catchper questo, il controllo va lì. Se non ci sono catchblocchi, si ottiene l'interruzione della "seconda possibilità", questa volta il messaggio è Un'eccezione non gestita di tipo 'foo' si è verificata in YourApp.exe . Da qui, provare a continuare o fare un passo avanti non avrà successo.
Jeppe Stig Nielsen

@supercat: come faccio a conoscere i dettagli come hai menzionato nei tuoi commenti sopra? È il risultato di auto-sperimentazione? leggere libri (quale)? È un'intuizione davvero impressionante! Ti sarei grato se potesse prenderti un momento per rispondere a questa domanda ...
Anish

2
@NoSaidTheCompiler: ho letto della gestione delle eccezioni in vari blog; Mi aspetto che una ricerca per "filtro eccezioni .net" dovrebbe far apparire alcuni blog sull'argomento.
supercat


4

Ho appena iniziato a usare il debugger e mi sono imbattuto in questo. Nella mia ricerca, ho trovato il post del blog MSDN Che cos'è un'eccezione prima possibilità?che ha chiarito tutto per me.

I punti salienti del post sul blog per me sono che si riferisce alla notifica al debugger e non a qualcosa che il mio codice dovrebbe necessariamente gestire e, cosa più importante, "I messaggi di eccezione della prima possibilità il più delle volte non significano che ci sia un problema nel codice."


Inserisci un estratto ( non l'intero articolo ) di ciò che hai trovato utile da quel link. C'era un collegamento precedente solo risposta con lo stesso collegamento che è stato eliminato.
Mark Hall

La cosa più importante per me è che si riferisce alla notifica al debugger e non a qualcosa che il mio codice dovrebbe necessariamente gestire e, cosa più importante, "I messaggi di eccezione della prima possibilità molto spesso non significano che c'è un problema nel codice."
codingatty

Ho aggiunto il tuo commento alla tua risposta, sento che il link è abbastanza importante da tenerlo in giro, sto cercando di assicurarmi che non venga considerato un link solo risposta come la volta precedente che è stato dato.
Mark Hall

0

Quando un'applicazione viene sottoposta a debug, il debugger riceve una notifica ogni volta che viene rilevata un'eccezione. A questo punto l'applicazione viene sospesa e il debugger decide come gestire l'eccezione. Il primo passaggio attraverso questo meccanismo è chiamato eccezione di "prima possibilità".

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

I messaggi di prima possibilità di eccezione molto spesso non significano che c'è un problema nel codice. Per le applicazioni / componenti che gestiscono le eccezioni in modo corretto, i messaggi di eccezione della prima possibilità informano lo sviluppatore che si è verificata una situazione eccezionale e che è stata gestita.


0

Dal punto di vista di uno sviluppatore, è più preoccupante un'eccezione di seconda possibilità, perché significherebbe che non è stata gestita in codice ; pertanto l'applicazione verrebbe interrotta.

La prima possibilità potrebbe essere molte di loro, ma quelle di cui preoccuparsi di più, ancora una volta, dal punto di vista dello sviluppo, sono una seconda possibilità, perché porterebbe a un crash dell'applicazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.