Che cosa è esattamente un'eccezione di prima scelta? Come e dove ha origine in un programma .NET? E perché è chiamato con quel nome particolare (di che "caso" stiamo parlando)?Che cos'è una "prima eccezione di possibilità"?
risposta
È 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.
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).
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. "
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. –
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
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. –
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.
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.
- 1. OWIN WebApp.Start dà una prima eccezione di possibilità di tipo 'System.Reflection.TargetInvocationException' in mscorlib.dll
- 2. Python 3 eccezione elimina variabile allegando possibilità di sconosciuto motivo
- 3. Possibilità di una galleria curva
- 4. Laravel Mail Listener (Prima di inviare - Possibilità di annullare)
- 5. Esiste comunque la possibilità che RubyMine scelga la prima scelta di completamento come Intellij Idea?
- 6. Qualche possibilità che javafuse possa funzionare?
- 7. Registrazione asincrona che lancia una eccezione NullReferenceException
- 8. Una prima eccezione casuale di tipo 'System.IndexOutOfRangeException' in exe nella finestra di output
- 9. perché ottenere prima eccezione chace in C++
- 10. eccezione windbg in sos.threads alla prima esecuzione
- 11. Integer.parseint in Java, eccezione quando '+' viene prima
- 12. Eccezione di overflow dello stack prima di main()
- 13. HTML Mosaic - possibilità di codifica
- 14. Perché il mio oggetto TStrings viene distrutto prima che il mio distruttore abbia la possibilità di funzionare?
- 15. Affermare che una particolare eccezione viene generata in Cetriolo
- 16. Percentuale possibilità di rendere l'azione
- 17. Eccezione ResultSet - prima dell'inizio del set di risultati
- 18. corrispondenza di una stringa con varie possibilità usando grep
- 19. Che tipo di eccezione per gettare
- 20. C# che tipo di eccezione dovrei aumentare?
- 21. Lancio di una nuova eccezione durante il lancio di una vecchia eccezione
- 22. C'è una sequenza di tasti in Visual Studio per attivare l'interruzione su tutte le eccezioni CLR, prima possibilità?
- 23. Android: ottieni l'altezza di una vista prima che venga disegnata.
- 24. React.js, attendere che setState termini prima di attivare una funzione?
- 25. Come verificare che una funzione venga chiamata prima di un'altra
- 26. Istanziare l'oggetto di una classe prima che main() venga eseguito
- 27. Come sostituire una stringa in una stringa ad eccezione della prima occorrenza
- 28. Che tipo di eccezione dovrei lanciare?
- 29. Si è verificata una prima eccezione di tipo "System.InvalidCastException" in WindowsBase.dll
- 30. Possibilità di annullare la chiamata asincrona
È 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
... il codice che si aspettava di catturare l'eccezione originale potrebbe finire per non farlo; ci sono molti casi d'angolo strani. – supercat
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. –