Kivételek kezelése a Hibakeresővel a Visual Studióban

A kivétel egy olyan hibaállapot jelzése, amely egy program végrehajtása közben következik be. Megadhatja a hibakeresőnek, hogy mely kivételeket vagy kivételkészleteket kell megszakítania, és hogy melyik időpontban szeretné megszakítani a hibakeresőt (azaz szüneteltetni a hibakeresőben). Amikor a hibakereső megszakad, megmutatja, hogy hol történt a kivétel. Kivételeket is hozzáadhat vagy törölhet. A Visual Studióban megnyitott megoldással a Windows > kivételbeállítások hibakeresésével > nyissa meg a Kivételbeállítások ablakot.

Adja meg a legfontosabb kivételekre reagáló kezelőket. Ha tudnia kell, hogyan adhat hozzá kezelőket a kivételekhez, olvassa el a hibák kijavítása című témakört jobb C#-kód megírásával. Azt is megtudhatja, hogyan konfigurálhatja úgy a hibakeresőt, hogy bizonyos kivételek esetén mindig megszakítsa a végrehajtást.

Kivétel esetén a hibakereső kivételüzenetet ír a Kimenet ablakba. Az alábbi esetekben megszakíthatja a végrehajtást, ha:

  • A rendszer kivételt jelez, amelyet nem kezelnek.
  • A hibakereső úgy van konfigurálva, hogy megszakítsa a végrehajtást a kezelő meghívása előtt.
  • Beállította a Just My Code-ot, és a hibakereső úgy van konfigurálva, hogy megszakítsa a felhasználói kódban nem kezelt kivételeket.

Megjegyzés:

ASP.NET rendelkezik egy legfelső szintű kivételkezelővel, amely egy böngészőben jeleníti meg a hibaoldalakat. Csak akkor szakítja meg a végrehajtást, ha a Just My Code be van kapcsolva. Például lásd lent: Hogyan utasítsuk a hibakeresőt, hogy folytassa a felhasználó által nem kezelt kivételek esetén.

Megjegyzés:

Egy Visual Basic-alkalmazásban a hibakereső kivételként kezeli az összes hibát, még akkor is, ha On Error típusú hibakezelőket használ.

Mondja meg a hibakeresőnek, hogy törjön meg kivétel esetén

A hibakereső megszakíthatja a végrehajtást abban a pillanatban, amikor kivételt ad ki, ezért a kivételt a kezelő meghívása előtt megvizsgálhatja.

A Kivételbeállítások ablakban (Windows > kivételbeállítások hibakeresése>) bontsa ki a csomópontot egy kivételkategóriához, például a Common Language Runtime Exceptionshez. Ezután jelölje be az adott kategórián belüli kivétel (például System.AccessViolationException) jelölőnégyzetét. A kivételek teljes kategóriáját is kiválaszthatja.

Képernyőkép a Kivétel beállításai párbeszédpanelről.

Képernyőkép a

Jótanács

Bizonyos kivételeket a Kivételbeállítások eszköztár Keresés ablakával, vagy a kereséssel szűrhet adott névterekre (például System.IO).

Ha kivételt választ a Kivétel beállításai ablakban, a hibakereső végrehajtása mindenhol megszakad, ahol a kivétel ki van dobva, függetlenül attól, hogy a kivételt kezelik-e. Most a kivételt első esélykivételnek nevezzük. Íme például néhány forgatókönyv:

  • A következő C#-konzolalkalmazásban a Main metódus egy AccessViolationException metódust dob egy try/catch blokkba.

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

    Ha az AccessViolationException be van jelölve a kivételbeállításokban, a végrehajtás megszakad a throw sorban, amikor a kódot a hibakeresőben futtatja. Ezután folytathatja a végrehajtást. A konzolnak mindkét sort meg kell jelenítenie:

    caught exception
    goodbye
    

    de nem jeleníti meg a here vonalat.

  • A C#-konzolalkalmazások egy két metódust tartalmazó osztálytárra hivatkoznak. Az egyik metódus kivételt vet ki, és kezeli azt, míg egy második metódus ugyanazt a kivételt veti ki, de nem kezeli.

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

    A konzolalkalmazás Main() metódusa a következő:

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

    Ha az AccessViolationException be van jelölve a Kivételbeállítások területen, a végrehajtás a throw és a ThrowUnhandledException() sorban is megszakad, amikor a kódot a hibakeresőben futtatja.

A kivételbeállítások alapértelmezett értékre való visszaállításához válassza a Lista visszaállítása az alapértelmezett beállítások gombra:

Képernyőkép a Kivételbeállítások alapértelmezett visszaállítás gombjáról.

Képernyőkép a kivételbeállítások alapértelmezett beállításainak visszaállításáról.

Mondja meg a hibakeresőnek, hogy folytassa a felhasználó által nem kezelt kivételeket

Ha a .NET- vagy JavaScript-kódot a Just My Code használatával hibakeresi, beállíthatja a hibakeresőt úgy, hogy ne álljon meg a felhasználói kódban nem kezelt, de máshol kezelt kivételeknél.

  1. A Kivételbeállítások ablakban nyissa meg a helyi menüt úgy, hogy a jobb gombbal egy oszlopcímkére kattint, majd válassza az Oszlopok > további műveletek megjelenítése lehetőséget. (Ha kikapcsolta a Just My Code funkciót, akkor ez a parancs nem jelenik meg.) Megjelenik egy harmadik , További műveletek nevű oszlop.

    Képernyőkép a További műveletek oszlopról.

    Az oszlop felhasználói kódjában nem kezelt Continue (Folytatás ) lehetőséget megjelenítő kivétel esetén a hibakereső akkor is folytatódik, ha a kivételt nem a felhasználói kód kezeli, hanem külsőleg kezeli.

  2. Egy adott kivétel beállításának módosításához válassza ki a kivételt, kattintson a jobb gombbal a helyi menü megjelenítéséhez, és válassza a Folytatás, ha nincs kezelve a felhasználói kódban. A kivételek teljes kategóriájának beállítását is módosíthatja, például a teljes közös nyelvi futtatókörnyezeti kivételt).

    Képernyőkép a

Például ASP.NET webalkalmazások úgy kezelik a kivételeket, hogy HTTP 500 állapotkóddá konvertálják őket (kivételkezelés ASP.NET Webes API-ban), ami nem feltétlenül segít a kivétel forrásának meghatározásában. Az alábbi példában a felhasználói kód egy hívást String.Format() indít, amely egy FormatException. Végrehajtási szünetek az alábbiak szerint:

Képernyőkép a System.FormatExceptionről.

A felhasználó által nem kezelt kivétel leállításai

Kivételek hozzáadása és törlése

Kivételeket adhat hozzá és törölhet. Ha törölni szeretne egy kivételtípust egy kategóriából, jelölje ki a kivételt, és válassza a Kivétel beállításai eszköztár lista gombjáról (mínuszjel) a kijelölt kivétel törlése lehetőséget. Vagy kattintson a jobb gombbal a kivételre, és válassza a Törlés lehetőséget a helyi menüből. A kivétel törlése ugyanolyan hatással van, mint a kivétel nem ellenőrzötté tétele, ami azt eredményezi, hogy a hibakereső nem fog megszakadni, amikor a kivételt dobják.

Kivétel hozzáadása:

  1. A Kivétel beállításai ablakban válassza ki a kivételkategóriák egyikét (például a Common Language Runtime-t).

  2. Válassza az Hozzon létre kivételt a kiválasztott kategóriához gombot (a pluszjel).

    Képernyőkép a Kivétel hozzáadása a kijelölt kategóriához gombról.

    Képernyőkép: Kivétel hozzáadása a kijelölt kategóriagombhoz.

  3. Írja be a kivétel nevét (például System.UriTemplateMatchException).

    A kivétel nevét megjelenítő képernyőkép.

    Képernyőkép a kivétel nevének megadásáról.

    A kivételt a rendszer hozzáadja a listához (betűrendben), és automatikusan bejelöli.

Ha kivételt szeretne hozzáadni a GPU memóriahozzáférés-kivételekhez, a JavaScript futtatókörnyezeti kivételekhez vagy a Win32 Kivételek kategóriához, adja meg a hibakódot és a leírást.

Jótanács

Ellenőrizze a helyesírását! A Kivétel beállításai ablak nem ellenőrzi a hozzáadott kivétel meglétét. Tehát ha beírja a Sytem.UriTemplateMatchException kifejezést, akkor a kivételhez kapcsolódó bejegyzés jelenik meg (és nem a System.UriTemplateMatchException esetében).

A kivételbeállítások megmaradnak a megoldás .suo fájljában, ezért egy adott megoldásra vonatkoznak. A különböző megoldásokban nem használhatja fel az adott kivételbeállításokat. Most csak a hozzáadott kivételek maradnak meg; A törölt kivételek nem. Hozzáadhat egy kivételt, bezárhatja és újra megnyithatja a megoldást, és a kivétel továbbra is ott lesz. Ha azonban töröl egy kivételt, és bezárja/újra megnyitja a megoldást, a kivétel újra megjelenik.

A Kivételbeállítások ablak a C# általános kivételtípusokat támogatja, a Visual Basicben azonban nem. Az olyan kivételek megszakításához, mint a MyNamespace.GenericException<T>, hozzá kell adnia a kivételt MyNamespace.GenericException`1 formában. Vagyis ha a következő kódhoz hasonló kivételt hozott létre:

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

A kivételt hozzáadhatja a kivétel beállításaihoz az előző eljárással:

Általános kivétel hozzáadását bemutató képernyőkép.

Az Általános kivétel hozzáadása képernyőképe.

Feltételek hozzáadása kivételhez

A Kivétel beállításai ablakban feltételeket állíthat be a kivételekhez. A jelenleg támogatott feltételek közé tartoznak a kivételbe felvenni vagy kizárni kívánt modulnevek. A modulnevek feltételként való beállításával dönthet úgy, hogy csak bizonyos kódmodulokon szakítja meg a kivételt. Dönthet úgy is, hogy elkerüli az egyes modulok megszakítását.

Megjegyzés:

A kivétel feltételeinek hozzáadása a Visual Studio 2017-től támogatott.

Feltételes kivételek hozzáadása:

  1. Válassza a Kivétel beállításai ablakban a Feltételek szerkesztése gombot, vagy kattintson a jobb gombbal a kivételre, és válassza a Feltételek szerkesztése parancsot.

    Képernyőkép a kivételi feltételekről.

    Képernyőkép a kivételi feltételekről.

  2. Ha további szükséges feltételeket szeretne hozzáadni a kivételhez, válassza a Feltétel hozzáadása lehetőséget minden egyes új feltételhez. További feltételsorok jelennek meg.

    Képernyőkép egy kivétel további feltételeiről.

    Képernyőkép egy kivétel további feltételeiről.

  3. Minden feltételsorhoz írja be a modul nevét, és módosítsa az összehasonlító operátorok listáját Egyenlőség vagy Nem egyenlő értékre. Egynél több modul megadásához helyettesítő karaktereket (\*) is megadhat a névben.

  4. Ha törölnie kell egy feltételt, válassza az X elemet a feltételsor végén.