Visual Studio: Wie kann man mit behandelten Ausnahmen umgehen?

165

Ich möchte, dass Visual Studio unterbrochen wird, wenn eine behandelte Ausnahme auftritt (dh ich möchte nicht nur eine Meldung "Erste Chance" sehen, sondern die eigentliche Ausnahme debuggen).

zB möchte ich, dass der Debugger bei der Ausnahme kaputt geht:

try
{
   System.IO.File.Delete(someFilename);
}
catch (Exception)
{
   //we really don't care at runtime if the file couldn't be deleted
}

Ich bin auf diese Hinweise für Visual Studio.NET gestoßen:

1) Gehen Sie in VS.NET zum Debug-Menü >> "Ausnahmen ..." >> "Common Language Runtime Exceptions" >> "System" und wählen Sie "System.NullReferenceException".

2) Im unteren Bereich dieses Dialogfelds befindet sich das Gruppenfeld "Wenn die Ausnahme ausgelöst wird:". Wählen Sie "In den Debugger einbrechen".

3) Führen Sie Ihr Szenario aus. Wenn die Ausnahme ausgelöst wird, stoppt der Debugger und benachrichtigt Sie mit einem Dialogfeld, das etwa Folgendes sagt: "Eine Ausnahme vom Typ" System.NullReferenceException "wurde ausgelöst. [Break] [Continue]"

Drücke [Pause]. Dadurch gelangen Sie in die Codezeile, die das Problem verursacht.

Sie gelten jedoch nicht für Visual Studio 2005 ( im Menü Debug gibt es keine Option für Ausnahmen ).

Weiß jemand, wo das Dialogfeld "Diese Optionen suchen" in Visual Studio das Gruppenfeld " Wenn die Ausnahme ausgelöst wird " mit der Option " In den Debugger einbrechen " enthält?

Update: Das Problem war, dass mein Debug- Menü kein Ausnahmeelement enthielt . Ich habe das Menü angepasst, um es manuell hinzuzufügen.

Ian Boyd
quelle
9
In VS2015 war es unter Debug-> Windows-> Ausnahmeeinstellungen
PeterVermont
Ich habe eine Weile gebraucht, um herauszufinden, wie ich die Standardausnahmeeinstellungen wiederherstellen kann, nachdem ich einige der Ausnahmeeinstellungen geändert habe, daher eine neue Antwort. Wiederherstellen der Ausnahmeeinstellungen auf Standard
Mabito

Antworten:

170

Wechseln Sie bei geöffneter Lösung zur Menüoption Debug - Ausnahmen ( Ctrl+ D, E). Von dort aus können Sie wählen , auf brechen Geworfen oder Benutzer nicht behandelte Ausnahmen.

BEARBEITEN: Meine Instanz ist mit dem C # "Profil" eingerichtet. Vielleicht ist sie nicht für andere Profile vorhanden?

Austin Salonen
quelle
10
Ich habe einfach keine solche Option. Das würde meine Verwirrung erklären.
Ian Boyd
58
Ich hatte das Debug-Menü, aber keine Ausnahmen Optionen. Ich habe das Menü angepasst, um es manuell hinzuzufügen. Die Tastenkombination funktionierte in beide Richtungen (Strg + Alt + E)
Ian Boyd
3
Sie können die VS2010-Umgebung auch zurücksetzen, indem Sie zu "Extras", "Exporteinstellungen importieren" gehen und ein Zurücksetzen auf die C # -Umgebung auswählen. Sie enthält das Untermenü "Ausnahmen"
BeardinaSuit,
14
Ich habe Common Language Runtime Exceptions> <All Common Language Runtime Exceptions not in this list>unter Visual Studio 2017 ausgewählt und alle meine wildesten Träume wurden wahr.
Aaron Newton
9
Visual Studio 2015: Debuggen -> Windows -> Ausnahmeeinstellungen
Achecopar
47

Es gibt eine ‚Ausnahmen‘ Fenster in VS2005 ... versuchen Ctrl+ Alt+ Ebeim Debuggen und klicken Sie auf ‚Thrown‘ Checkbox für die Ausnahme , die Sie stoppen möchten.

Rob Walker
quelle
Genau das will ich. Wo ist das im Menü? Für das Leben von mir kann ich es nicht finden.
Ian Boyd
Die Tastenkombination kann sich je nach Profil ändern (C # -Entwickler, C ++ - Entwickler usw.)
Asaf R
1
Ich habe einen Menüpunkt: Debug -> Ausnahmen. Dies ist mit VS2005 Professional. Führen Sie eine Express Edition aus?
Rob Walker
5
Wenn Sie den Menüpunkt Ausnahmen wünschen: Wählen Sie Extras | Anpassen .... Klicken Sie auf die Registerkarte Befehle. Wählen Sie die Debug-Kategorie im Feld Kategorien aus. Suchen Sie das Befehlselement Ausnahmen ... und ziehen Sie es in das Debug-Menü oben in der Anwendung. Legen Sie es an der entsprechenden Stelle im Menü ab. (gefunden in den Kommentaren auf: blogs.vertigo.com/personal/keithc/Blog/archive/2007/07/20/… )
Sotto
33

Ich habe eine Weile gebraucht, um den neuen Ort für Erwartungseinstellungen zu finden, daher eine neue Antwort.

Seit Visual Studio 2015 steuern Sie im Fenster "Ausnahmeeinstellungen" (Debug-> Windows-> Ausnahmeeinstellungen), welche Ausnahmen gestoppt werden sollen. Die Verknüpfung ist immer noch Ctrl- Alt- E.

Die einfachste Möglichkeit, benutzerdefinierte Ausnahmen zu behandeln, besteht darin, "Alle Ausnahmen, die nicht in dieser Liste enthalten sind" auszuwählen.

Hier ist ein Screenshot aus der englischen Version:

Geben Sie hier die Bildbeschreibung ein

Hier ist ein Screenshot aus der deutschen Version:

Geben Sie hier die Bildbeschreibung ein

Anfänger
quelle
16

Ab Visual Studio 2015 müssen Sie im Dialogfeld "Ausnahmeeinstellungen" ( Ctrl+ Alt+ E) die Option "Common Language Runtime Exceptions" (oder eine bestimmte Ausnahme, die Sie möchten) aktivieren ArgumentNullException, damit sie bei behandelten Ausnahmen unterbrochen wird .

Schritt 1 Schritt 1 Schritt 2 Schritt 2

Sameer Alibhai
quelle
8

Aktivieren Sie das Kontrollkästchen Ausnahmen auf der Debugger- Seite verwalten. Hier erfahren Sie, wie Sie dies einrichten.

Im Wesentlichen sind hier die Schritte (während des Debuggens):

  1. Klicken Sie im Menü Debuggen auf Ausnahmen.

  2. Wählen Sie im Dialogfeld Ausnahmen die Option Ausgelöst für eine ganze Kategorie von Ausnahmen aus, z. B. Common Language Runtime Exceptions.

    -oder-

    Erweitern Sie den Knoten für eine Kategorie von Ausnahmen, z. B. Common Language Runtime Exceptions, und wählen Sie Thrown für eine bestimmte Ausnahme innerhalb dieser Kategorie aus.

Guy Starbuck
quelle
1

Eine Technik, die ich benutze, ist ungefähr die folgende. Definieren Sie eine globale Variable, die Sie für einen oder mehrere Try-Catch-Blöcke verwenden können, je nachdem, was Sie debuggen möchten, und verwenden Sie die folgende Struktur:

if(!GlobalTestingBool)
{
   try
   {
      SomeErrorProneMethod();
   }
   catch (...)
   {
      // ... Error handling ...
   }
}
else
{
   SomeErrorProneMethod();
}

Ich finde, das gibt mir ein bisschen mehr Flexibilität beim Testen, da es immer noch einige Ausnahmen gibt, bei denen die IDE nicht unterbrochen werden soll.

Spencer Ruport
quelle
3
Dies ist eine nützliche Technik - sie verwandelt die behandelte Ausnahme in eine nicht behandelte Ausnahme, sodass der Debugger sie automatisch beendet. Ich bin mir nicht sicher, warum es abgelehnt wurde, es sei denn, es gibt keine gute Möglichkeit, Ihren GlobalTestingBool festzulegen. Eine andere, möglicherweise bessere Option ist die Verwendung von Debugger.IsAttached.
Joe White
Sie müssten dies bei jedem Versuch / Fang hinzufügen und Ihren Code neu kompilieren. Nicht sehr nützlich, wenn Sie bereits etwas debuggen.
Max
Eine Ausnahme sollte im Code ausgelöst werden, wenn eine außergewöhnliche Bedingung vorliegt - etwas Inakzeptables - und auf einer Ebene abgefangen werden, auf der entschieden werden kann, wie damit umgegangen werden soll. Code wie dieser verkompliziert die Ausführungspfade.
Lee Oades
Ich weiß, dass dies eine wirklich alte Antwort ist, aber für zufällige Googler wie mich können Sie einfach hinzufügencatch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
Jan 'splite' K.
0

Die Online-Dokumentation scheint etwas unklar zu sein, deshalb habe ich nur einen kleinen Test durchgeführt. Wenn Sie im Dialogfeld " Ausnahmen" die Option " Auf Thrown unterbrechen" auswählen, wird die Programmausführung bei jeder Ausnahme unterbrochen, die behandelt oder nicht behandelt wird. Wenn Sie nur behandelte Ausnahmen unterbrechen möchten, besteht Ihre einzige Möglichkeit darin, Ihren Code durchzugehen und Haltepunkte für alle behandelten Ausnahmen zu setzen. Dies scheint etwas übertrieben zu sein, daher ist es möglicherweise besser, eine Debug-Anweisung hinzuzufügen, wenn Sie eine Ausnahme behandeln. Wenn Sie diese Ausgabe sehen, können Sie einen Haltepunkt an dieser Zeile im Code festlegen.

Markysdad
quelle