3 Stimmen

Verhindern, dass der Debugger bei allen Exceptions in einer 3rd-Party-Bibliothek abbricht

Ich verwalte eine Open-Source-Bibliothek, die intern Ausnahmen während eines rekursiven Methodenaufrufs verwendet. Die Ausnahme wird auf den Aufrufstapel zurückgelegt und in einigen Fällen behandelt, während sie in anderen Fällen an den Aufrufer zurückgegeben wird.

Das Problem, das wir im Moment haben, ist, dass einige Benutzer Visual Studio Debugger mit der Option "Anhalten bei allen Ausnahmen" ausführen, so dass ihr Debugger in unserem Code anhält, während er normal funktioniert.

Gibt es eine andere Möglichkeit, dies zu verhindern, als die Benutzer aufzufordern, diese Einstellung zu deaktivieren? Zum Beispiel, indem man den Code mit einem Attribut versieht?

7voto

Roman Starkov Punkte 55278

Dies ist sehr wohl möglich. Alles, was Sie tun müssen, ist, Visual Studio dazu zu bringen, den entsprechenden Code als Nicht-Benutzer-Code und aktivieren Sie dann die Option "Nur mein Code" in den Debugger-Einstellungen:

enter image description here

Es gibt mehrere Möglichkeiten, Visual Studio davon zu überzeugen, dass Ihre Bibliothek kein Anwendercode ist . Eine Möglichkeit besteht darin, einfach einen Release-Build ohne PDB-Dateien zu kompilieren. Eine andere Möglichkeit ist markieren Sie Ihren Code mit DebuggerNonUserCodeAttribute .

Es gibt eine Demo-Projekt die diese Dinge in Aktion zeigen: https://bitbucket.org/rstarkov/demononusercode/src - Beachten Sie, dass die Methoden in MyLibrary mit dem Attribut "Nicht-Benutzercode" gekennzeichnet sind. Selbst wenn Sie Visual Studio anweisen, bei "Thrown" für alle Ausnahmen anzuhalten, wird die Ausnahme in MyLibrary übersprungen.

Ich halte das, was Sie tun, nicht für falsch. Es ist eine Frage der richtigen Konfiguration des Debuggers. Keine Ausnahmen zu verwenden, nur weil jemand seinen Debugger so eingestellt hat, dass er bei allem anhält, klingt nicht gerade richtig.

2voto

Richard Punkte 103159

Ich glaube nicht, dass es eine Möglichkeit gibt, zu verhindern, dass "Halt on All Exceptions" genau das tut.

Gibt es eine andere Möglichkeit, dies zu verhindern, als die Benutzer aufzufordern, diese Einstellung zu deaktivieren?

Nur durch die Vermeidung der Verwendung von Ausnahmen für andere Zwecke als die Fehlerbehandlung (nach Ihrer Beschreibung klingt es fast so, als würde Ihre Bibliothek gegen diese Richtlinie verstoßen).

0voto

ertan Punkte 613

Nein, man kann es nicht verhindern.

Ich empfehle die Änderung Ihres Entwurfs, um Rückgabecodes/Klassen anstelle von Ausnahmen zu verwenden. Ausnahmen ist sehr teuer für rekursive Methodenaufrufe.

0voto

Omer Raviv Punkte 11073

Dies ist ein Halbklon von diese Frage.

Beachten Sie, dass keines der Attribute dort vorgeschlagen schien zu erreichen, was Sie fragen, wenn ich sie mit VS2010.

Sie können sicherstellen, dass Sie immer denselben benutzerdefinierten Ausnahmetyp senden, d. h. TigraineNamespace.TigraineException, und dann Ihre Benutzer anweisen, das Dialogfeld "Ausnahmen" aufzurufen (Strg+Alt+E), auf "Hinzufügen" zu klicken, "TigraineNamespace.TigraineException" einzugeben, die Eingabetaste zu drücken und dann das Kontrollkästchen für Ihre spezielle Ausnahme zu deaktivieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X