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 dem Debugger mitteilen, welche Ausnahmen oder Gruppen von Ausnahmen unterbrochen werden sollen, und an welchem Punkt der Debugger unterbrochen werden soll (d. a. im Debugger anhalten). 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 . Die Ausführung kann in den folgenden Fällen abgebrochen werden, wenn:
- Eine Ausnahme wird ausgelöst, die nicht behandelt wird.
- Der Debugger ist so konfiguriert, dass die Ausführung unterbrochen wird, bevor ein Handler aufgerufen wird.
- Sie haben Just My Code festgelegt, und der Debugger ist so konfiguriert, dass er bei einer Ausnahme anhält, die im Benutzercode nicht 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.
Anweisen des Debuggers, wenn eine Ausnahme ausgelöst wird, zu unterbrechen
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" (Windows-Ausnahmeeinstellungendebuggen >>) den Knoten für eine Kategorie von Ausnahmen, z. B. Common Language Runtime Exceptions. 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 Zeile wird jedoch nicht angezeigt
here.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 AccessViolationException in den Ausnahmeeinstellungen aktiviert ist, wird die Ausführung sowohl in der
throwZeile 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 Spaltenbeschriftung klicken und dann "Spalten zusätzliche Aktionen anzeigen" >auswählen. (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 Weiter bei unbehandeltem Benutzercode in dieser Spalte anzeigt, setzt der Debugger die Ausführung fort, wenn diese Ausnahme nicht im Benutzercode, aber 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 ruft der Benutzercode String.Format() auf, der eine FormatException auslöst. 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 die gleiche Auswirkung wie das Deaktivieren der Ausnahme, d. h., dass der Debugger nicht anhält, wenn sie 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 auch wählen, Störungen bei bestimmten Modulen zu 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.