Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett undantag är en indikation på ett feltillstånd som inträffar när ett program körs. Du kan tala om för felsökaren vilka undantag eller uppsättningar av undantag som ska brytas och då vill du att felsökaren ska brytas (det vill säga pausa i felsökningsprogrammet). När debuggern stannar visas var undantaget utlöstes. Du kan också lägga till eller ta bort undantag. När en lösning är öppen i Visual Studio använder du Felsöka > Windows-undantagsinställningar > för att öppna fönstret Undantagsinställningar.
Ange hanterare som svarar på de viktigaste undantagen. Om du behöver veta hur du lägger till hanterare för undantag kan du läsa Åtgärda buggar genom att skriva bättre C#-kod. Lär dig också hur du konfigurerar felsökningsprogrammet så att körningen alltid avbryts för vissa undantag.
När ett undantag inträffar skriver felsökaren ett undantagsmeddelande till fönstret Utdata . Det kan avbryta körningen i följande fall när:
- Ett undantag genereras som inte hanteras.
- Debuggern är konfigurerad för att bryta exekveringen innan någon hanterare kallas.
- Du har angett Just My Code och felsökningsprogrammet är konfigurerat för att bryta alla undantag som inte hanteras i användarkoden.
Anmärkning
ASP.NET har en undantagshanterare på den översta nivån som visar felsidor i en webbläsare. Den bryter inte körningen om inte Just My Code är aktiverat. Ett exempel finns i Be felsökaren att fortsätta använda ohanterade undantag nedan.
Anmärkning
I ett Visual Basic-program hanterar avlusaren alla fel som undantag, även om du använder On Error-stil felhanterare.
Be felsökaren att bryta när ett undantag utlöses
Avlusaren kan stoppa exekveringen när ett undantag kastas, så att du kan inspektera undantaget innan en hanterare påkallas.
I fönstret Undantagsinställningar (Felsöka > Windows-undantagsinställningar>) expanderar du noden för en kategori av undantag, till exempel Common Language Runtime Exceptions. Markera sedan kryssrutan för ett specifikt undantag inom den kategorin, till exempel System.AccessViolationException. Du kan också välja en hel kategori med undantag.
Tips/Råd
Du kan hitta specifika undantag med hjälp av sökfönstret i verktygsfältet Undantagsinställningar eller använda sök för att filtrera efter specifika namnområden (till exempel System.IO).
Om du väljer ett undantag i fönstret Undantagsinställningar avbryts felsökningskörningen oavsett var undantaget utlöses, oavsett om det hanteras. Nu kallas undantaget ett första chanstillfälle. Här är till exempel några scenarier:
I följande C#-konsolprogram genererar Main-metoden en AccessViolationException i ett
try/catchblock.static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("here"); } catch (Exception e) { Console.WriteLine("caught exception"); } Console.WriteLine("goodbye"); }Om du har aktiverat AccessViolationException i Undantagsinställningar, kommer körningen att brytas på
throw-raden när du kör denna kod i felsökningsprogrammet. Du kan sedan fortsätta exekveringen. Konsolen bör visa båda raderna:caught exception goodbyemen den visar inte
herelinjen.Ett C#-konsolprogram refererar till ett klassbibliotek med en klass som har två metoder. En metod genererar ett undantag och hanterar det, medan en andra metod genererar samma undantag men inte hanterar det.
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(); } }Här är main()-metoden för konsolprogrammet:
static void Main(string[] args) { Class1 class1 = new Class1(); class1.ThrowHandledException(); class1.ThrowUnhandledException(); }Om du har markerat AccessViolationException i Undantagsinställningar bryts körningen
throwpå raden i både ThrowHandledException() och ThrowUnhandledException() när du kör den här koden i felsökningsprogrammet.
Om du vill återställa undantagsinställningarna till standardinställningarna väljer du knappen Återställ listan till standardinställningarna :
Be felsökaren att fortsätta vid undantag som inte hanteras av användaren
Om du felsöker .NET- eller JavaScript-kod med Just My Code kan du be felsökaren att förhindra att undantag som inte hanteras i användarkod bryts men hanteras någon annanstans.
I fönstret Undantagsinställningar öppnar du snabbmenyn genom att högerklicka på en kolumnetikett och sedan välja Visa kolumner > ytterligare åtgärder. (Om du har inaktiverat Just My Code visas inte det här kommandot.) En tredje kolumn med namnet Ytterligare åtgärder visas.
För ett undantag som visar Fortsätt när den är ohanterad i användarkoden i den här kolumnen fortsätter felsökningsprogrammet om undantaget inte hanteras i användarkoden men hanteras externt.
Om du vill ändra den här inställningen för ett visst undantag väljer du undantaget, högerklickar för att visa snabbmenyn och väljer Fortsätt när den är ohanterad i användarkoden. Du kan också ändra inställningen för en hel kategori av undantag, till exempel hela Common Language Runtime-undantagen).
Till exempel kan ASP.NET webbprogram hantera undantag genom att konvertera dem till en HTTP 500-statuskod (undantagshantering i ASP.NET webb-API), vilket kanske inte hjälper dig att fastställa källan till undantaget. I exemplet nedan gör användarkoden ett anrop till String.Format() som genererar en FormatException. Utförandepauser sker enligt följande:
Lägga till och ta bort undantag
Du kan lägga till och ta bort undantag. Om du vill ta bort en undantagstyp från en kategori väljer du undantaget och väljer ta bort det valda undantaget från listknappen (minustecknet) i verktygsfältet Undantagsinställningar . Eller så kan du högerklicka på undantaget och välja Ta bort på snabbmenyn. Att ta bort ett undantag har samma effekt som att undantaget är avmarkerat, vilket är att felsökningsprogrammet inte bryts när det utlöses.
Så här lägger du till ett undantag:
I fönstret Undantagsinställningar väljer du en av undantagskategorierna (till exempel Common Language Runtime).
Välj knappen Lägg till ett undantag till den valda kategorin (plustecknet).
Ange namnet på undantaget (till exempel System.UriTemplateMatchException).
Undantaget läggs till i listan (i alfabetisk ordning) och kontrolleras automatiskt.
Om du vill lägga till ett undantag i kategorierna GPU Memory Access Exceptions, JavaScript Runtime Exceptions eller Win32 Exceptions inkluderar du felkoden och beskrivningen.
Tips/Råd
Kontrollera stavningen! Fönstret Undantagsinställningar kontrollerar inte om det finns ett extra undantag. Så om du skriver Sytem.UriTemplateMatchException får du en post för det undantaget (och inte för System.UriTemplateMatchException).
Undantagsinställningarna sparas i lösningens .suo-fil, så de gäller för en viss lösning. Du kan inte återanvända specifika undantagsinställningar för olika lösningar. Nu sparas endast tillagda undantag; borttagna undantag sparas inte. Du kan lägga till ett undantag, stänga och öppna lösningen igen, och undantaget finns kvar. Men om du tar bort ett undantag och stänger/öppnar lösningen igen visas undantaget igen.
Fönstret Undantagsinställningar stöder allmänna undantagstyper i C# men inte i Visual Basic. Om du vill bryta undantag som MyNamespace.GenericException<T>måste du lägga till undantaget som MyNamespace.GenericException'1. Om du har skapat ett undantag som den här koden:
public class GenericException<T> : Exception
{
public GenericException() : base("This is a generic exception.")
{
}
}
Du kan lägga till undantaget i Undantagsinställningar med hjälp av föregående procedur:
Lägga till villkor i ett undantag
Använd fönstret Undantagsinställningar för att ange villkor för undantag. Villkor som stöds för närvarande omfattar de modulnamn som ska inkluderas eller exkluderas för undantaget. Genom att ange modulnamn som villkor kan du välja att endast bryta för undantaget i vissa kodmoduler. Du kan också välja att undvika att bryta på vissa moduler.
Anmärkning
Du kan lägga till villkor i ett undantag från och med Visual Studio 2017.
Så här lägger du till villkorsstyrda undantag:
Välj knappen Redigera villkor i fönstret Undantagsinställningar eller högerklicka på undantaget och välj Redigera villkor.
Om du vill lägga till extra obligatoriska villkor i undantaget väljer du Lägg till villkor för varje nytt villkor. Ytterligare villkorsrader visas.
För varje villkorsrad skriver du namnet på modulen och ändrar jämförelseoperatorlistan till Lika med eller Inte lika med. Du kan ange jokertecken (\*) i namnet för att ange fler än en modul.
Om du behöver ta bort ett villkor väljer du X i slutet av villkorsraden.