Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un'eccezione è un'indicazione di uno stato di errore che si verifica durante l'esecuzione di un programma. È possibile indicare al debugger quali eccezioni o set di eccezioni su cui sospendere l'esecuzione e a quale punto si desidera che il debugger si interrompa (cioè, fermarsi nel debugger). Quando il debugger si interrompe, viene visualizzata la posizione in cui è stata generata l'eccezione. È anche possibile aggiungere o eliminare eccezioni. Con una soluzione aperta in Visual Studio, utilizzare Debug > Windows > Impostazioni eccezioni per aprire la finestra Impostazioni eccezioni.
Fornire gestori che rispondono alle eccezioni più importanti. Se è necessario sapere come aggiungere gestori per le eccezioni, vedere Correggere i bug scrivendo codice C# migliore. Informazioni su come configurare il debugger per interrompere sempre l'esecuzione per alcune eccezioni.
Quando si verifica un'eccezione, il debugger scrive un messaggio di eccezione nella finestra Output . Può interrompere l'esecuzione nei casi seguenti quando:
- Viene generata un'eccezione che non viene gestita.
- Il debugger è configurato per interrompere l'esecuzione prima che venga richiamato qualsiasi gestore.
- È stato impostato Just My Code e il debugger è configurato per interrompere qualsiasi eccezione non gestita nel codice utente.
Annotazioni
ASP.NET dispone di un gestore di eccezioni di primo livello che mostra le pagine di errore in un browser. Non interrompe l'esecuzione a meno che Just My Code non sia attivato. Per un esempio, vedere Indicare al debugger di continuare sulle eccezioni non gestite dall'utente di seguito.
Annotazioni
In un'applicazione Visual Basic, il debugger gestisce tutti gli errori come eccezioni, anche se si utilizzano gestori di errori nello stile di On Error.
Indicare al debugger di interrompere quando viene generata un'eccezione
Il debugger può interrompere l'esecuzione nel punto in cui viene generata un'eccezione, pertanto è possibile esaminare l'eccezione prima che venga richiamato un gestore.
Nella finestra Impostazioni eccezioni (Windows Debug, > Impostazioni eccezioni>), espandete il nodo per una categoria di eccezioni, ad esempio Eccezioni di Common Language Runtime. Selezionare quindi la casella di controllo per un'eccezione specifica all'interno di tale categoria, ad esempio System.AccessViolationException. È anche possibile selezionare un'intera categoria di eccezioni.
Suggerimento
È possibile trovare eccezioni specifiche usando la finestra Cerca nella barra degli strumenti Impostazioni eccezioni oppure usare la ricerca per filtrare gli spazi dei nomi specifici, ad esempio System.IO.
Se si seleziona un'eccezione nella finestra Impostazioni eccezioni , l'esecuzione del debugger verrà interrotta ovunque venga generata l'eccezione, indipendentemente dal fatto che venga gestita. Ora l'eccezione viene chiamata eccezione per la prima probabilità. Di seguito sono riportati alcuni scenari:
Nell'applicazione console C# seguente, il metodo Main genera un AccessViolationException all'interno di un blocco
try/catch.static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("here"); } catch (Exception e) { Console.WriteLine("caught exception"); } Console.WriteLine("goodbye"); }Se accessViolationException è selezionato in Impostazioni eccezioni, l'esecuzione si interromperà nella
throwriga quando si esegue questo codice nel debugger. È quindi possibile continuare l'esecuzione. La console deve visualizzare entrambe le righe:caught exception goodbyema non visualizza la
herelinea.Un'applicazione console C# fa riferimento a una libreria di classi con una classe con due metodi. Un metodo genera un'eccezione e lo gestisce, mentre un secondo metodo genera la stessa eccezione ma non la gestisce.
public class Class1 { public void ThrowHandledException() { try { throw new AccessViolationException(); } catch (AccessViolationException ave) { Console.WriteLine("caught exception" + ave.Message); } } public void ThrowUnhandledException() { throw new AccessViolationException(); } }Ecco il metodo Main() dell'applicazione console:
static void Main(string[] args) { Class1 class1 = new Class1(); class1.ThrowHandledException(); class1.ThrowUnhandledException(); }Se AccessViolationException è selezionato in Impostazioni eccezioni, l'esecuzione verrà interrotta nella
throwriga sia in ThrowHandledException() che in ThrowUnhandledException() quando si esegue questo codice nel debugger.
Per ripristinare le impostazioni predefinite delle eccezioni, scegliere il pulsante Ripristina l'elenco alle impostazioni predefinite :
Indicare al debugger di continuare sulle eccezioni non gestite dall'utente
Se si esegue il debug di codice .NET o JavaScript con Just My Code, è possibile indicare al debugger di impedire l'interruzione in caso di eccezioni non gestite nel codice utente ma gestite altrove.
Nella finestra Impostazioni eccezioni aprire il menu di scelta rapida facendo clic con il pulsante destro del mouse su un'etichetta di colonna e quindi scegliere Mostra colonne > Azioni aggiuntive. Se è stato disattivato Just My Code, questo comando non verrà visualizzato. Viene visualizzata una terza colonna denominata Azioni aggiuntive .
Per un'eccezione che mostra Continua quando non gestito nel codice utente in questa colonna, il debugger continua se tale eccezione non viene gestita nel codice utente ma viene gestita esternamente.
Per modificare questa impostazione per una particolare eccezione, selezionare l'eccezione, fare clic con il pulsante destro del mouse per visualizzare il menu di scelta rapida e scegliere Continua quando non gestito in Codice utente. È anche possibile modificare l'impostazione per un'intera categoria di eccezioni, ad esempio l'intera eccezione common Language Runtime.
Ad esempio, ASP.NET applicazioni Web gestiscono le eccezioni convertendole in un codice di stato HTTP 500 (gestione delle eccezioni in ASP.NET API Web), che potrebbe non essere utile per determinare l'origine dell'eccezione. Nell'esempio seguente il codice utente esegue una chiamata a String.Format() che genera un'eccezione FormatException. Le interruzioni di esecuzione sono le seguenti:
Aggiungere ed eliminare eccezioni
È possibile aggiungere ed eliminare eccezioni. Per eliminare un tipo di eccezione da una categoria, selezionare l'eccezione e scegliere Elimina l'eccezione selezionata dal pulsante elenco (segno meno) sulla barra degli strumenti Impostazioni eccezioni . In alternativa, è possibile fare clic con il pulsante destro del mouse sull'eccezione e scegliere Elimina dal menu di scelta rapida. L'eliminazione di un'eccezione ha lo stesso effetto che si ha quando non è selezionata nel debugger: il debugger non si fermerà quando l'eccezione viene generata.
Per aggiungere un'eccezione:
Nella finestra Impostazioni eccezioni selezionare una delle categorie di eccezioni, ad esempio Common Language Runtime.
Scegliere il pulsante Aggiungi un'eccezione alla categoria selezionata (segno più).
Digitare il nome dell'eccezione, ad esempio System.UriTemplateMatchException.
L'eccezione viene aggiunta all'elenco (in ordine alfabetico) e selezionata automaticamente.
Per aggiungere un'eccezione alle categorie Eccezioni di accesso alla memoria GPU, Eccezioni di runtime JavaScript o Eccezioni Win32, includere il codice di errore e la descrizione.
Suggerimento
Controlla l'ortografia! La finestra Impostazioni eccezioni non verifica l'esistenza di un'eccezione aggiunta. Quindi se si digita Sytem.UriTemplateMatchException, si otterrà una voce per tale eccezione (e non per System.UriTemplateMatchException).
Le impostazioni delle eccezioni sono mantenute nel file .suo della soluzione, quindi si applicano a una soluzione specifica. Non è possibile riutilizzare impostazioni di eccezione specifiche tra le soluzioni. Ora vengono mantenute solo le eccezioni aggiunte; le eccezioni eliminate non vengono mantenute. È possibile aggiungere un'eccezione, chiudere e riaprire la soluzione e l'eccezione sarà ancora presente. Tuttavia, se si elimina un'eccezione e si chiude/riapre la soluzione, l'eccezione verrà nuovamente visualizzata.
La finestra Impostazioni eccezioni supporta tipi di eccezione generici in C# ma non in Visual Basic. Per interrompere le eccezioni come MyNamespace.GenericException<T>, è necessario aggiungere l'eccezione come MyNamespace.GenericException'1. Ovvero, se è stata creata un'eccezione simile al codice seguente:
public class GenericException<T> : Exception
{
public GenericException() : base("This is a generic exception.")
{
}
}
È possibile aggiungere l'eccezione a Impostazioni eccezioni usando la procedura precedente:
Aggiungere condizioni a un'eccezione
Usare la finestra Impostazioni eccezioni per impostare le condizioni per le eccezioni. Le condizioni attualmente supportate includono i nomi del modulo da includere o escludere per l'eccezione. Impostando i nomi dei moduli come condizioni, è possibile scegliere di interrompere l'eccezione solo in determinati moduli di codice. È anche possibile scegliere di evitare interruzioni in determinati moduli.
Annotazioni
L'aggiunta di condizioni a un'eccezione è supportata a partire da Visual Studio 2017.
Per aggiungere eccezioni condizionali:
Scegliere il pulsante Modifica condizioni nella finestra Impostazioni eccezioni oppure fare clic con il pulsante destro del mouse sull'eccezione e scegliere Modifica condizioni.
Per aggiungere condizioni aggiuntive necessarie all'eccezione, selezionare Aggiungi condizione per ogni nuova condizione. Vengono visualizzate righe di condizione aggiuntive.
Per ogni riga di condizione, digitare il nome del modulo e modificare l'elenco di operatori di confronto in Equals o Not Equals. È possibile utilizzare caratteri jolly (\*) nel nome per indicare più moduli.
Se è necessario eliminare una condizione, scegliere la X alla fine della riga della condizione.