Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine Ausnahme ist ein Hinweis auf einen Fehlerstatus, der auftritt, während ein Programm ausgeführt wird. Sie können den Debugger informieren, bei welchen Ausnahmen oder Gruppen von Ausnahmen eine Unterbrechung erforderlich erfolgen soll und an welchem Punkt der Debugger eine Unterbrechung vornehmen soll (d.h. Pause im Debugger). Wenn der Debugger stoppt, zeigt er Ihnen, wo die Ausnahme ausgelöst wurde. Sie können auch Ausnahmen hinzufügen oder löschen. Wenn eine Lösung in Visual Studio geöffnet ist, verwenden Sie "Windows-Ausnahmeeinstellungen debuggen >>", um das Fenster "Ausnahmeeinstellungen" zu öffnen.
Stellen Sie Handler bereit, die auf die wichtigsten Ausnahmen reagieren. Wenn Sie wissen müssen, wie Sie Handler für Ausnahmen hinzufügen können, lesen Sie "Beheben von Fehlern", indem Sie besseren C#-Code schreiben. Außerdem erfahren Sie, wie Sie den Debugger so konfigurieren, dass die Ausführung für einige Ausnahmen immer abgebrochen wird.
Wenn eine Ausnahme auftritt, schreibt der Debugger eine Ausnahmemeldung in das Ausgabefenster . In den folgenden Fällen kann die Ausführung unterbrochen werden:
- Es wird eine Ausnahme ausgelöst, die nicht behandelt wird.
- Der Debugger ist so konfiguriert, dass die Ausführung unterbrochen wird, bevor ein Handler aufgerufen wird.
- Wenn Sie Nur eigenen Code festgelegt haben und der Debugger so konfiguriert ist, dass eine Unterbrechung bei jeder Ausnahme veranlasst wird, die nicht im Benutzercode behandelt wird.
Hinweis
ASP.NET verfügt über einen Ausnahmehandler auf oberster Ebene, der Fehlerseiten in einem Browser anzeigt. Die Ausführung wird nicht abgebrochen, es sei denn "Just My Code" ist aktiviert. Ein Beispiel finden Sie unter Anweisung an den Debugger, bei benutzerbedingt nicht behandelten Ausnahmen fortzufahren weiter unten.
Hinweis
In einer Visual Basic-Anwendung verwaltet der Debugger alle Fehler als Ausnahmen, auch wenn Sie On Error-Fehlerbehandler verwenden.
Festlegen, dass der Debugger die Ausführung bei ausgelöster Ausnahme unterbricht
Der Debugger kann die Ausführung an dem Punkt unterbrechen, an dem eine Ausnahme ausgelöst wird. Daher können Sie die Ausnahme untersuchen, bevor ein Handler aufgerufen wird.
Erweitern Sie im Fenster Ausnahmeeinstellungen (Debuggen > Windows > Ausnahmeeinstellungen) den Knoten für eine Kategorie von Ausnahmen, z. B.CLR-Ausnahmen. Aktivieren Sie dann das Kontrollkästchen für eine bestimmte Ausnahme innerhalb dieser Kategorie, z. B. System.AccessViolationException. Sie können auch eine gesamte Kategorie von Ausnahmen auswählen.
Tipp
Sie können bestimmte Ausnahmen mithilfe des Suchfensters in der Symbolleiste "Ausnahmeeinstellungen " finden oder die Suche verwenden, um nach bestimmten Namespaces (z. B. System.IO) zu filtern.
Wenn Sie im Fenster "Ausnahmeeinstellungen " eine Ausnahme auswählen, wird die Debuggerausführung unabhängig davon, wo die Ausnahme ausgelöst wird, abgebrochen, unabhängig davon, ob sie behandelt wird. Die Ausnahme wird nun als erste Zufalls ausnahme bezeichnet. Hier sind z. B. einige Szenarien:
In der folgenden C#-Konsolenanwendung löst die Main-Methode eine AccessViolationException innerhalb eines
try/catchBlocks aus.static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("here"); } catch (Exception e) { Console.WriteLine("caught exception"); } Console.WriteLine("goodbye"); }Wenn AccessViolationException in den Ausnahmeeinstellungen aktiviert ist, wird die Ausführung in der
throwZeile unterbrochen, wenn Sie diesen Code im Debugger ausführen. Anschließend können Sie die Ausführung fortsetzen. Die Konsole sollte beide Linien anzeigen:caught exception goodbyeDie
here-Zeile wird jedoch nicht angezeigt.Eine C#-Konsolenanwendung verweist auf eine Klassenbibliothek mit einer Klasse mit zwei Methoden. Eine Methode löst eine Ausnahme aus und behandelt sie, während eine zweite Methode dieselbe Ausnahme auslöst, sie aber nicht behandelt.
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(); } }Dies ist die Main()-Methode der Konsolenanwendung:
static void Main(string[] args) { Class1 class1 = new Class1(); class1.ThrowHandledException(); class1.ThrowUnhandledException(); }Wenn Sie AccessViolationException in den Ausnahmeeinstellungen aktiviert haben, wird die Ausführung an der
throw-Zeile sowohl in ThrowHandledException() als auch in ThrowUnhandledException() unterbrochen, wenn Sie diesen Code im Debugger ausführen.
Um die Ausnahmeeinstellungen auf die Standardeinstellungen zurückzusetzen, wählen Sie die Schaltfläche Liste auf die Standardeinstellungen zurücksetzen aus.
Weisen Sie den Debugger an, bei vom Benutzer nicht behandelten Ausnahmen fortzufahren.
Wenn Sie .NET- oder JavaScript-Code mit Just My Code debuggen, können Sie den Debugger anweisen, das Unterbrechen von Ausnahmen zu verhindern, die nicht im Benutzercode behandelt werden, aber an anderer Stelle behandelt werden.
Öffnen Sie im Fenster Ausnahmeeinstellungen das Kontextmenü, indem Sie mit der rechten Maustaste auf eine Spaltenbezeichnung klicken, und wählen Sie dann Spalten anzeigen > Weitere Aktionen aus. (Wenn Sie just My Code deaktiviert haben, wird dieser Befehl nicht angezeigt.) Eine dritte Spalte mit dem Namen "Zusätzliche Aktionen " wird angezeigt.
Für eine Ausnahme, die Fortfahren, wenn in Benutzercode nicht behandelt in dieser Spalte anzeigt, wird der Debugger fortgesetzt, wenn diese Ausnahme nicht im Benutzercode, sondern extern behandelt wird.
Wenn Sie diese Einstellung für eine bestimmte Ausnahme ändern möchten, wählen Sie die Ausnahme aus, klicken Sie mit der rechten Maustaste, um das Kontextmenü anzuzeigen, und wählen Sie "Weiter bei nicht behandelten Ausnahmen im Benutzer-Code" aus. Sie können auch die Einstellung für eine gesamte Kategorie von Ausnahmen ändern, z. B. die gesamten Common Language Runtime-Ausnahmen).
Beispielsweise behandeln ASP.NET Webanwendungen Ausnahmen, indem sie in einen HTTP 500-Statuscode (Ausnahmebehandlung in ASP.NET Web-API) konvertiert werden, was Ihnen möglicherweise nicht helfen kann, die Quelle der Ausnahme zu ermitteln. Im folgenden Beispiel wird durch den Benutzercode String.Format() aufgerufen, wodurch eine FormatExceptionausgelöst wird. Ausführungsunterbrechungen wie folgt:
Hinzufügen und Löschen von Ausnahmen
Sie können Ausnahmen hinzufügen und löschen. Wenn Sie einen Ausnahmetyp aus einer Kategorie löschen möchten, wählen Sie die Ausnahme aus, und wählen Sie auf der Symbolleiste "Ausnahmeeinstellungen" die ausgewählte Ausnahme aus der Listenschaltfläche (minuszeichen) aus. Oder Sie können mit der rechten Maustaste auf die Ausnahme klicken und im Kontextmenü "Löschen" auswählen. Das Löschen einer Ausnahme hat dieselbe Wirkung wie das Deaktivieren, d. h. der Debugger wird nicht unterbrochen, wenn die Ausnahme ausgelöst wird.
So fügen Sie eine Ausnahme hinzu:
Wählen Sie im Fenster "Ausnahmeeinstellungen " eine der Ausnahmekategorien aus (z. B. Common Language Runtime).
Wählen Sie die Schaltfläche 'Ausnahme zur ausgewählten Kategorie hinzufügen' (Pluszeichen).
Geben Sie den Namen der Ausnahme ein (z. B . System.UriTemplateMatchException).
Die Ausnahme wird der Liste (in alphabetischer Reihenfolge) hinzugefügt und automatisch überprüft.
Wenn Sie eine Ausnahme zu den GPU-Speicherzugriffs-Ausnahmen; JavaScript-Runtime-Ausnahmen; oder Win32-Ausnahmkategorien hinzufügen möchten, schließen Sie den Fehlercode und die Beschreibung ein.
Tipp
Überprüfen Sie Ihre Rechtschreibung! Das Fenster "Ausnahmeeinstellungen " überprüft nicht, ob eine hinzugefügte Ausnahme vorhanden ist. Wenn Sie Sytem.UriTemplateMatchException also eingeben, erhalten Sie einen Eintrag für diese Ausnahme (und nicht für System.UriTemplateMatchException).
Ausnahmeeinstellungen werden in der SUO-Datei der Lösung beibehalten, sodass sie auf eine bestimmte Lösung angewendet werden. Sie können bestimmte Ausnahmeeinstellungen nicht für lösungen hinweg wiederverwenden. Jetzt werden nur hinzugefügte Ausnahmen gespeichert; gelöschte Ausnahmen werden nicht beibehalten. Sie können eine Ausnahme hinzufügen, die Lösung schließen und erneut öffnen, und die Ausnahme ist weiterhin vorhanden. Wenn Sie jedoch eine Ausnahme löschen und die Lösung schließen/erneut öffnen, wird die Ausnahme wieder angezeigt.
Das Fenster "Ausnahmeeinstellungen " unterstützt generische Ausnahmetypen in C#, aber nicht in Visual Basic. Um Ausnahmen wie MyNamespace.GenericException<T>zu unterbrechen, müssen Sie die Ausnahme als MyNamespace.GenericException'1 hinzufügen. Das heißt, wenn Sie eine Ausnahme wie diesen Code erstellt haben:
public class GenericException<T> : Exception
{
public GenericException() : base("This is a generic exception.")
{
}
}
Mit dem vorherigen Verfahren können Sie die Ausnahme zu den Ausnahmeeinstellungen hinzufügen:
Hinzufügen von Bedingungen zu einer Ausnahme
Verwenden Sie das Fenster "Ausnahmeeinstellungen" , um Bedingungen für Ausnahmen festzulegen. Derzeit unterstützte Bedingungen umfassen die Modulnamen, die für die Ausnahme eingeschlossen oder ausgeschlossen werden sollen. Indem Sie Modulnamen als Bedingungen festlegen, können Sie festlegen, dass die Ausnahme nur für bestimmte Codemodule abgebrochen werden soll. Sie können eine Unterbrechung für bestimmte Module auch vermeiden.
Hinweis
Das Hinzufügen von Bedingungen zu einer Ausnahme wird ab Visual Studio 2017 unterstützt.
So fügen Sie bedingte Ausnahmen hinzu:
Wählen Sie im Fenster "Ausnahmeeinstellungen" die Schaltfläche " Bedingungen bearbeiten " aus, oder klicken Sie mit der rechten Maustaste auf die Ausnahme, und wählen Sie "Bedingungen bearbeiten" aus.
Wenn Sie der Ausnahme zusätzliche erforderliche Bedingungen hinzufügen möchten, wählen Sie "Bedingung hinzufügen " für jede neue Bedingung aus. Zusätzliche Bedingungslinien werden angezeigt.
Geben Sie für jede Bedingungszeile den Namen des Moduls ein, und ändern Sie die Vergleichsoperatorliste in "Gleich" oder "Nicht gleich". Sie können Platzhalter (\*) im Namen angeben, um mehr als ein Modul zu spezifizieren.
Wenn Sie eine Bedingung löschen müssen, wählen Sie das X am Ende der Bedingungszeile aus.