Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Een uitzondering is een indicatie van een foutstatus die optreedt terwijl een programma wordt uitgevoerd. U kunt de debugger vertellen op welke uitzonderingen of sets uitzonderingen u wilt onderbreken en op welk punt u de debugger wilt pauzeren (dat wil zeggen, onderbreken in de debugger). Wanneer het foutopsporingsprogramma wordt onderbroken, ziet u waar de uitzondering is opgetreden. U kunt ook uitzonderingen toevoegen of verwijderen. Als een oplossing is geopend in Visual Studio, gebruikt u Foutopsporingsinstellingen > voor Windows-uitzonderingen > om het venster Uitzonderingsinstellingen te openen.
Geef handlers op die reageren op de belangrijkste uitzonderingen. Als u wilt weten hoe u handlers toevoegt voor uitzonderingen, raadpleegt u Bugs oplossen door betere C#-code te schrijven. Lees ook hoe u het foutopsporingsprogramma zo configureert dat de uitvoering van bepaalde uitzonderingen altijd wordt onderbroken.
Wanneer er een uitzondering optreedt, schrijft het foutopsporingsprogramma een uitzonderingsbericht naar het uitvoervenster . De uitvoering kan in de volgende gevallen worden onderbroken wanneer:
- Er wordt een uitzondering opgeworpen die niet wordt verwerkt.
- Het foutopsporingsprogramma is geconfigureerd om de uitvoering te verbreken voordat een handler wordt aangeroepen.
- U hebt Just My Code ingesteld en het foutopsporingsprogramma is geconfigureerd om te breken op een uitzondering die niet wordt verwerkt in de gebruikerscode.
Opmerking
ASP.NET heeft een uitzonderingshandler op het hoogste niveau waarin foutpagina's in een browser worden weergegeven. De uitvoering wordt niet verbroken, tenzij Just My Code is ingeschakeld. Zie Vertel de debugger om door te gaan bij niet-verwerkte uitzonderingen hieronder voor een voorbeeld.
Opmerking
In een Visual Basic-toepassing beheert de debugger alle fouten als uitzonderingen, zelfs als u foutafhandelaren in On Error-stijl gebruikt.
Laat het foutopsporingsprogramma stoppen wanneer er een uitzondering wordt opgegooid
Het foutopsporingsprogramma kan de uitvoering verbreken op het punt waarop een uitzondering wordt gegenereerd, zodat u de uitzondering kunt onderzoeken voordat een handler wordt aangeroepen.
Vouw in het venster Uitzonderingsinstellingen (Fouten opsporen in > Windows-uitzonderingsinstellingen>) het knooppunt uit voor een categorie uitzonderingen, zoals Common Language Runtime-uitzonderingen. Schakel vervolgens het selectievakje in voor een specifieke uitzondering binnen die categorie, zoals System.AccessViolationException. U kunt ook een hele categorie uitzonderingen selecteren.
Aanbeveling
U kunt specifieke uitzonderingen vinden met behulp van het zoekvenster op de werkbalk Uitzonderingsinstellingen of zoeken om te filteren op specifieke naamruimten (zoals System.IO).
Als u een uitzondering selecteert in het venster Uitzonderingsinstellingen , wordt de uitvoering van het foutopsporingsprogramma verbroken waar de uitzondering wordt gegenereerd, ongeacht of deze wordt verwerkt. De uitzondering wordt nu een eerste kans-uitzondering genoemd. Hier volgen bijvoorbeeld een aantal scenario's:
In de volgende C#-consoletoepassing genereert de Main-methode een AccessViolationException in een
try/catchblok.static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("here"); } catch (Exception e) { Console.WriteLine("caught exception"); } Console.WriteLine("goodbye"); }Als AccessViolationException is ingeschakeld in Uitzonderingsinstellingen, wordt de uitvoering op de
throwregel verbroken wanneer u deze code uitvoert in het foutopsporingsprogramma. Vervolgens kunt u doorgaan met de uitvoering. In de console moeten beide regels worden weergegeven:caught exception goodbyemaar het geeft de
hereregel niet weer.Een C#-consoletoepassing verwijst naar een klassebibliotheek met een klasse met twee methoden. Eén methode genereert een uitzondering en verwerkt deze, terwijl een tweede methode dezelfde uitzondering genereert, maar deze niet verwerkt.
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(); } }Dit is de Main()-methode van de consoletoepassing:
static void Main(string[] args) { Class1 class1 = new Class1(); class1.ThrowHandledException(); class1.ThrowUnhandledException(); }Als u AccessViolationException hebt gecontroleerd in Uitzonderingsinstellingen, wordt de uitvoering verbroken op de
throwregel in zowel ThrowHandledException() als ThrowUnhandledException() wanneer u deze code uitvoert in het foutopsporingsprogramma.
Als u de uitzonderingsinstellingen wilt herstellen naar de standaardinstellingen, kiest u de lijst herstellen naar de standaardinstellingenknop :
Geef het foutopsporingsprogramma de opdracht om door te gaan met gebruikers-onverwerkte uitzonderingen
Als u fouten opspoort in .NET- of JavaScript-code met Just My Code, kunt u de debugger vertellen om te voorkomen dat het programma onderbreekt bij uitzonderingen die niet in de gebruikerscode worden afgehandeld, maar elders worden verwerkt.
Open in het venster Uitzonderingsinstellingen het snelmenu door met de rechtermuisknop op een kolomlabel te klikken en vervolgens Aanvullende acties voor kolommen > weergeven te selecteren. (Als u Just My Code hebt uitgeschakeld, ziet u deze opdracht niet.) Er wordt een derde kolom met de naam Extra acties weergegeven.
Voor een uitzondering waarbij in deze kolom Doorgaan als niet afgehandeld in gebruikerscode wordt vermeld, gaat de debugger door als die uitzondering niet wordt afgehandeld in gebruikerscode, maar wel extern is afgehandeld.
Als u deze instelling voor een specifieke uitzondering wilt wijzigen, selecteert u de uitzondering, klikt u met de rechtermuisknop om het contextmenu weer te geven en selecteert u "Continue When Unhandled in User Code". U kunt ook de instelling wijzigen voor een hele categorie uitzonderingen, zoals de volledige Common Language Runtime-uitzonderingen).
ASP.NET webtoepassingen bijvoorbeeld uitzonderingen verwerken door ze te converteren naar een HTTP 500-statuscode (uitzonderingsafhandeling in ASP.NET Web-API), waardoor u mogelijk niet de bron van de uitzondering kunt bepalen. In het onderstaande voorbeeld maakt de gebruikerscode een aanroep naar String.Format(), waarbij een FormatException wordt opgeroepen. De uitvoering wordt als volgt onderbroken:
Uitzonderingen toevoegen en verwijderen
U kunt uitzonderingen toevoegen en verwijderen. Als u een uitzonderingstype uit een categorie wilt verwijderen, selecteert u de uitzondering en kiest u de geselecteerde uitzondering verwijderen uit de lijstknop (het minteken) op de werkbalk Uitzonderingsinstellingen . U kunt ook met de rechtermuisknop op de uitzondering klikken en Verwijderen selecteren in het snelmenu. Het verwijderen van een uitzondering heeft hetzelfde effect als wanneer de uitzondering niet is gecontroleerd, namelijk dat de debugger niet pauzeert wanneer deze wordt opgetreden.
Een uitzondering toevoegen:
Selecteer in het venster Uitzonderingsinstellingen een van de uitzonderingscategorieën (bijvoorbeeld Common Language Runtime).
Kies de knop Een uitzondering toevoegen aan de geselecteerde categorieknop (het plusteken).
Typ de naam van de uitzondering (bijvoorbeeld System.UriTemplateMatchException).
De uitzondering wordt toegevoegd aan de lijst (in alfabetische volgorde) en automatisch gecontroleerd.
Als u een uitzondering wilt toevoegen aan de gpu-uitzonderingen voor geheugentoegang, JavaScript Runtime-uitzonderingen of Win32-uitzonderingen, neemt u de foutcode en de beschrijving op.
Aanbeveling
Controleer uw spelling. Het venster Uitzonderingsinstellingen controleert niet op het bestaan van een toegevoegde uitzondering. Dus als u Sytem.UriTemplateMatchException typt, krijgt u een vermelding voor die uitzondering (en niet voor System.UriTemplateMatchException).
Uitzonderingsinstellingen blijven behouden in het SUO-bestand van de oplossing, zodat ze van toepassing zijn op een bepaalde oplossing. U kunt specifieke uitzonderingsinstellingen niet opnieuw gebruiken voor alle oplossingen. Nu worden alleen toegevoegde uitzonderingen persistent gemaakt; verwijderde uitzonderingen zijn niet. U kunt een uitzondering toevoegen, de oplossing sluiten en opnieuw openen en de uitzondering blijft aanwezig. Als u echter een uitzondering verwijdert en de oplossing sluit/opnieuw opent, wordt de uitzondering opnieuw weergegeven.
Het venster Uitzonderingsinstellingen ondersteunt algemene uitzonderingstypen in C# maar niet in Visual Basic. Als u op uitzonderingen zoals MyNamespace.GenericException<T> wilt breken, moet u de uitzondering toevoegen als MyNamespace.GenericException`1. Als u een uitzondering zoals deze code hebt gemaakt:
public class GenericException<T> : Exception
{
public GenericException() : base("This is a generic exception.")
{
}
}
U kunt de uitzondering toevoegen aan uitzonderingsinstellingen met behulp van de vorige procedure:
Voorwaarden toevoegen aan een uitzondering
Gebruik het venster Uitzonderingsinstellingen om voorwaarden in te stellen voor uitzonderingen. Momenteel ondersteunde voorwaarden omvatten de modulenaam(en) die moeten worden opgenomen of uitgesloten voor de uitzondering. Door modulenamen in te stellen als voorwaarden, kunt u ervoor kiezen om de uitzondering alleen voor bepaalde codemodules te verbreken. U kunt er ook voor kiezen om te voorkomen dat bepaalde modules worden onderbroken.
Opmerking
Het toevoegen van voorwaarden aan een uitzondering wordt ondersteund vanaf Visual Studio 2017.
Voorwaardelijke uitzonderingen toevoegen:
Kies de knop Voorwaarden bewerken in het venster Uitzonderingsinstellingen of klik met de rechtermuisknop op de uitzondering en kies Voorwaarden bewerken.
Als u extra vereiste voorwaarden wilt toevoegen aan de uitzondering, selecteert u Voorwaarde toevoegen voor elke nieuwe voorwaarde. Er worden extra voorwaardelijnen weergegeven.
Typ voor elke voorwaarderegel de naam van de module en wijzig de lijst met vergelijkingsoperatoren in Gelijk aan of Niet gelijk aan. U kunt jokertekens (\*) opgeven in de naam om meer dan één module op te geven.
Als u een voorwaarde wilt verwijderen, kiest u de X aan het einde van de voorwaarderegel.