Sdílet prostřednictvím


Spravujte výjimky pomocí ladicího nástroje v aplikaci Visual Studio

Výjimkou je označení chybového stavu, ke kterému dochází při provádění programu. Ladicí program můžete nastavit tak, aby se přerušil u určitých výjimek nebo sad výjimek a v konkrétním okamžiku, kdy chcete, aby se ladicí proces pozastavil (tedy zastavil provádění v rámci ladicího programu). Když debugger zastaví vykonávání, zobrazí se místo, kde byla vyvolána chyba. Můžete také přidat nebo odstranit výjimky. Pokud je řešení otevřené v sadě Visual Studio, použijte Ladění > Windows > Nastavení výjimek k otevření okna Nastavení výjimek.

Poskytněte obslužné rutiny reagující na výjimky, které jsou nejdůležitější. Pokud potřebujete vědět, jak přidat obslužné rutiny pro výjimky, přečtěte si článek Oprava chyb napsáním lepšího kódu jazyka C#. Zjistěte také, jak nakonfigurovat ladicí program tak, aby vždy přerušil provádění při některých výjimkách.

Když dojde k výjimce, ladicí program zapíše zprávu výjimky do okna Výstup . V následujících případech může přerušit provádění:

  • Došlo k vyvolání výjimky, která není zpracována.
  • Ladicí program je nakonfigurovaný tak, aby přerušil provádění před vyvoláním jakékoli obslužné rutiny.
  • Nastavili jste pouze můj kód a ladicí program je nakonfigurovaný tak, aby se přerušil při jakékoli výjimce, která není zpracována v uživatelském kódu.

Poznámka:

ASP.NET má zpracovatele výjimek nejvyšší úrovně, který zobrazuje chybové stránky v prohlížeči. Provádění se neporuší, pokud není zapnutý jenom můj kód . Příklad najdete v části Řekněte ladicímu programu, aby pokračoval v uživatelsky neošetřených výjimkách níže.

Poznámka:

Ladicí program v aplikaci Visual Basic spravuje všechny chyby jako výjimky, i když používáte obslužné rutiny chyb založené na stylu On Error.

Instruujte debugger, aby zastavil, když dojde k výjimce.

Ladicí program může přerušit provádění v okamžiku, kdy je vyvolána výjimka, takže můžete prozkoumat výjimku před vyvoláním obslužné rutiny.

V okně Nastavení výjimek (Ladění > nastavení výjimek systému Windows>) rozbalte uzel pro kategorii výjimek, jako jsou výjimky modulu CLR (Common Language Runtime Exceptions). Potom zaškrtněte políčko pro konkrétní výjimku v rámci této kategorie, například System.AccessViolationException. Můžete také vybrat celou kategorii výjimek.

Snímek obrazovky se zaškrtávacím políčkem Nastavení výjimek

Návod

Konkrétní výjimky můžete najít pomocí okna Hledat na panelu nástrojů Nastavení výjimek nebo pomocí vyhledávání můžete filtrovat konkrétní obory názvů (například System.IO).

Pokud v okně Nastavení výjimky vyberete výjimku, spuštění ladicího programu se přeruší všude, kde je výjimka vyvolána, bez ohledu na to, jestli je zpracována. Teď se výjimka nazývá první náhodná výjimka. Tady je například několik scénářů:

  • V následující konzolové aplikaci jazyka C# vyvolá Metoda Main výjimku AccessViolationException uvnitř try/catch bloku.

    static void Main(string[] args)
    {
        try
        {
            throw new AccessViolationException();
            Console.WriteLine("here");
        }
        catch (Exception e)
        {
            Console.WriteLine("caught exception");
        }
        Console.WriteLine("goodbye");
    }
    

    Pokud máte AccessViolationException označenou v Nastavení výjimky, provedení se přeruší na řádku throw při spuštění tohoto kódu v ladicím programu. Pak můžete pokračovat v provádění. Konzola by měla zobrazit oba řádky:

    caught exception
    goodbye
    

    ale nezobrazuje čáru here .

  • Konzolová aplikace jazyka C# odkazuje na knihovnu tříd s třídou, která má dvě metody. Jedna metoda vyvolá výjimku a zpracuje ji, zatímco druhá metoda vyvolá stejnou výjimku, ale nezpracuje ji.

    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();
        }
    }
    

    Tady je metoda Main() konzolové aplikace:

    static void Main(string[] args)
    {
        Class1 class1 = new Class1();
        class1.ThrowHandledException();
        class1.ThrowUnhandledException();
    }
    

    Pokud máte AccessViolationException zaškrtnutou v Nastavení výjimky, spuštění se přeruší na throw řádce v ThrowHandledException() i ThrowUnhandledException() při spuštění tohoto kódu v ladicím programu.

Pokud chcete obnovit nastavení výjimek na výchozí hodnoty, zvolte obnovit seznam na výchozí tlačítko nastavení :

Snímek obrazovky s obnovením výchozích hodnot v nastavení výjimky

Informujte ladicí program, aby pokračoval při neošetřených výjimkách uživatele.

Pokud ladíte kód .NET nebo JavaScript pomocí just My Code, můžete ladicímu programu říct, aby zabránil přerušení výjimek, které nejsou zpracovávány v uživatelském kódu, ale jsou zpracovávány jinde.

  1. V okně Nastavení výjimek otevřete místní nabídku kliknutím pravým tlačítkem myši na popisek sloupce a poté vyberte Zobrazit sloupce > Další akce. (Pokud jste vypnuli jenom můj kód, tento příkaz se nezobrazí.) Zobrazí se třetí sloupec s názvem Další akce .

    Snímek obrazovky se sloupcem Další akce

    Pro výjimku, která zobrazuje Pokračovat, pokud není zpracováno v uživatelském kódu v tomto sloupci, ladicí program pokračuje, pokud tato výjimka není zpracována v uživatelském kódu, ale je zpracována externě.

  2. Chcete-li změnit toto nastavení pro určitou výjimku, vyberte výjimku, kliknutím pravým tlačítkem myši zobrazte místní nabídku a vyberte Pokračovat při neošetřeném uživatelském kódu. Můžete také změnit nastavení pro celou kategorii výjimek, jako jsou například celé výjimky modulu Common Language Runtime).

    Snímek obrazovky s možností Pokračovat při neošetřeném nastavení uživatelského kódu

Například ASP.NET webové aplikace zpracovávají výjimky tak, že je převedou na stavový kód HTTP 500 (zpracování výjimek ve webovém rozhraní API ASP.NET), které nemusí pomoct určit zdroj výjimky. V následujícím příkladu uživatelský kód volá String.Format(), což vyvolá FormatException. Provádění se přeruší následujícím způsobem:

Dochází k přerušení při neošetřené výjimce uživatelem

Přidání a odstranění výjimek

Výjimky můžete přidávat a odstraňovat. Pokud chcete odstranit typ výjimky z kategorie, vyberte výjimku a na panelu nástrojů Nastavení výjimek zvolte tlačítko Odstranit vybranou výjimku ze seznamu (znaménko minus). Nebo můžete kliknout pravým tlačítkem myši na výjimku a v místní nabídce vybrat Odstranit . Odstranění výjimky má stejný účinek jako nezaškrtnutá výjimka, což znamená, že ladicí program se při vyvolání nepřeruší.

Přidání výjimky:

  1. V okně Nastavení výjimek vyberte jednu z kategorií výjimek (například Common Language Runtime).

  2. Zvolte tlačítko Přidat výjimku k vybrané kategorii (znaménko plus).

    Snímek obrazovky s tlačítkem Přidat výjimku pro vybranou kategorii

  3. Zadejte název výjimky (například System.UriTemplateMatchException).

    Snímek obrazovky s názvem typu výjimky

    Výjimka se přidá do seznamu (v abecedním pořadí) a automaticky se zaškrtne.

Pokud chcete přidat výjimku do kategorie výjimky přístupu do paměti GPU, výjimek v běhovém prostředí JavaScriptu, nebo výjimek Win32, uveďte kód chyby a popis.

Návod

Zkontrolujte pravopis. Okno Nastavení výjimek nekontroluje existenci přidané výjimky. Pokud tedy zadáte Sytem.UriTemplateMatchException, získáte pro tuto výjimku položku (a ne pro System.UriTemplateMatchException).

Nastavení výjimek se uchovávají v souboru .suo řešení, takže se vztahují na konkrétní řešení. V různých řešeních nemůžete znovu použít konkrétní nastavení výjimek. Nyní jsou zachovány pouze přidané výjimky; odstraněné výjimky nejsou. Můžete přidat výjimku, zavřít a znovu otevřít řešení a výjimka bude stále k dispozici. Pokud ale odstraníte výjimku a řešení zavřete nebo znovu otevřete, výjimka se znovu zobrazí.

Okno Nastavení výjimek podporuje obecné typy výjimek v jazyce C#, ale ne v jazyce Visual Basic. Chcete-li přerušit výjimky jako MyNamespace.GenericException<T>, musíte přidat výjimku jako MyNamespace.GenericException'1. To znamená, že pokud jste vytvořili výjimku, jako je tento kód:

public class GenericException<T> : Exception
{
    public GenericException() : base("This is a generic exception.")
    {
    }
}

Výjimku můžete přidat do nastavení výjimek pomocí předchozího postupu:

Snímek obrazovky s možností Přidat obecnou výjimku

Přidání podmínek k výjimce

K nastavení podmínek pro výjimky použijte okno Nastavení výjimek . V současné době podporované podmínky zahrnují názvy modulů, které se mají zahrnout nebo vyloučit pro výjimku. Když nastavíte názvy modulů jako podmínky, můžete se rozhodnout přerušit běh pouze u určitých modulů výjimky. Můžete se také rozhodnout, abyste se vyhnuli přerušení konkrétních modulů.

Poznámka:

Přidání podmínek k výjimce se podporuje od sady Visual Studio 2017.

Přidání podmíněných výjimek:

  1. Zvolte tlačítko Upravit podmínky v okně Nastavení výjimek nebo klikněte pravým tlačítkem myši na výjimku a zvolte Upravit podmínky.

    Snímek obrazovky s podmínkami výjimky

  2. Pokud chcete k výjimce přidat další požadované podmínky, vyberte přidat podmínku pro každou novou podmínku. Zobrazí se další řádky podmínek.

    Snímek obrazovky s dodatečnými podmínkami pro výjimku

  3. Pro každý řádek podmínky zadejte název modulu a změňte seznam relačních operátorů na Rovná se nebo Nerovná se. V názvu můžete zadat zástupné znaky (\*) pro specifikaci více než jednoho modulu.

  4. Pokud potřebujete odstranit podmínku, zvolte X na konci řádku podmínky.