In Tools / Ausnahmen habe ich die Option festgelegt, dass der Debugger stoppt, wenn eine Ausnahme ausgelöst wird. Ob es gefangen wird oder nicht.
Wie schließe ich eine Ausnahme von dieser Regel aus? Irgendwo in meinem Code gibt es eine abgefangene Ausnahme, die Teil der Programmlogik ist. Daher möchte ich natürlich nicht, dass diese Ausnahme den Debugger jedes Mal stoppt, wenn er getroffen wird.
Beispiel: Ich möchte die Nullreferenz-Ausnahme (die abgefangen wird) in Zeile 344 ignorieren. Ich möchte bei allen anderen Ausnahmen aufhören
Antworten:
Wenn ich mich richtig erinnere, können Sie ein
DebuggerStepThrough
Attribut für die Methode verwenden, die den Code enthält, für den keine Ausnahme ausgelöst werden soll. Ich nehme an, Sie können den Code, der die nervige Ausnahme auslöst, in einer Methode isolieren und mit dem Attribut dekorieren.quelle
DebuggerStepThrough
Attribut beeinflusst das Verhalten des Debuggers mit Ausnahmen der ersten Chance nicht.DebuggerStepThrough
Attribut für die CLR keine Bedeutung. Es wird von Debuggern interpretiert. Es scheint, dass es unter verschiedenen Umständen nicht zuverlässig funktioniert, und dasDebuggerHidden
wird zuverlässig funktionieren stackoverflow.com/a/3455100/141172DebuggerHidden
ist dein Freund!Getestet auf VS2010 und funktioniert super.
Während
DebuggerStepThrough
es auch für einige bestimmte Debugger-VersionenDebuggerHidden
zu funktionieren scheint , scheint es für ein breiteres Spektrum von Situationen zu funktionieren, basierend auf den Kommentaren zu beiden Antworten.Beachten Sie, dass beide Optionen derzeit nicht mit Iteratorblockmethoden oder für asynchrone / wartende Methoden funktionieren . Dies könnte in einem späteren Update von Visual Studio behoben werden.
quelle
DebuggerHidden
...DebuggerStepThrough wird verwendet, um zu verhindern, dass der Debugger eine Methode einbricht, bei der es einen Versuch / Fang gibt.
Dies funktioniert jedoch nur, wenn Sie die Option "Nur meinen Code aktivieren (nur verwaltet)" in den allgemeinen Einstellungen der Debugging-Optionen von Visual Studio (Menü Extras / Optionen, Knoten Debugging / Allgemein) nicht deaktiviert haben.
Weitere Informationen zu diesem Attribut finden Sie unter http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
DebuggerHidden verhindert einfach, dass der Debugger die Methode anzeigt, bei der die Ausnahme ausgelöst wird. Stattdessen wird die erste Methode auf dem Stapel angezeigt, die nicht mit diesem Attribut gekennzeichnet ist ...
quelle
Die in den anderen Antworten angegebenen Attribute (und andere wie das
DebuggerNonUserCode
Attribut) funktionieren in Visual Studio 2015 standardmäßig nicht mehr auf die gleiche Weise. Der Debugger bricht im Gegensatz zu älteren Versionen von VS Ausnahmen im Methodenmarkt mit diesen Attributen ab. Um die Leistungsverbesserung zu deaktivieren, die ihr Verhalten geändert hat, müssen Sie eine Registrierungseinstellung ändern:Weitere Informationen finden Sie im Visual Studio-Blog .
(Dies sollte wahrscheinlich ein Kommentar zur Top-Antwort sein, aber ich habe nicht genug Wiederholungen)
quelle
Sie können eine Ausnahme, die an einer bestimmten Stelle in Ihrem Code ausgelöst wurde, nicht herausgreifen. Sie können jedoch Ausnahmen eines bestimmten Typs deaktivieren.
Wenn Ihr eigener Code die fragliche Ausnahme auslöst, würde ich sie zu einer benutzerdefinierten Ausnahme machen, die von dem abgeleitet wird, was passt, und dann das Debug-Brechen für diesen abgeleiteten Typ deaktivieren.
Das Deaktivieren von Systemausnahmen als NullReferenceException wirkt sich auf das gesamte System aus, was während der Entwicklung natürlich nicht wünschenswert ist.
Beachten Sie, dass es für Ausnahmen zwei Arten von Unterbrechungsverhalten gibt:
Sie können die Prüfung in 'Thrown' für die NullReferenceException entfernen, wodurch Sie den Vorteil haben, dass Sie nicht jedes Mal brechen, wenn Ihr System die betreffende Zeile in Ihrem Code passiert, sondern trotzdem brechen, wenn in anderen Teilen der NullReference-Erwartung eine unbehandelte NullReference-Erwartung auftritt System.
quelle