Frage

Ich habe ein seltsames Problem mit meinem vs Debugger. Wenn mein Programm unter dem vs Debugger läuft, der Debugger bricht nicht auf einer nicht behandelten Ausnahme. Stattdessen wird die Steuerung an VS zurückgeführt, als ob das Programm normal beendet. Wenn ich in der Ausgabe Registerkarte sehe, gibt es eine erste Chance exeption aufgelistet kurz vor der Thread-Terminierung.

Ich verstehe, wie die „Ausnahmen“ -Box aus dem Debug-Menü zu verwenden. Ich habe die Pause auf unbehandelte Ausnahmen geprüft. Wenn ich die erste Chance Ausnahmen für die spezifische Ausnahme überprüfen, die auftreten wird, wird der Debugger stoppen.

Es ist aber mein Verständnis, dass der Debugger auch auf irgendwelchen ‚Unbehandelte-Ausnahmen‘ aufhören sollte. Es ist nicht für mich tun.

Hier sind die letzten Zeilen meines Register Ausgabe:

A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
The thread 0x60c has exited with code 0 (0x0).
The program '[3588] ALMSSecurityManager.vshost.exe: Managed' has exited with code -532459699 (0xe0434f4d).

Ich verstehe nicht, warum die Ausnahme flagges als eine „erste Chance“ Ausnahme ist, wenn es nicht behandelte ist.

Ich glaube, dass der 0xe0434f4d Exit-Code ein allgemeiner COM-Fehler ist.

Irgendwelche Ideen?

Metro.

War es hilfreich?

Lösung

Wenn Sie auf einem 64-Bit-Betriebssystem sind, gibt es eine ziemlich gute Chance, dass Sie von einem OS-Level-Verhalten gebissen wir Sie, die Ausnahmen verschwinden verursacht. Der zuverlässigste Weg, es zu reproduzieren, ist eine neue Windows Forms-Anwendung zu machen, die einfach eine Ausnahme in OnLoad wirft; es erscheint nicht geworfen werden. Werfen Sie einen Blick auf diese:

  1. Visual Studio bricht nicht auf nicht behandelte Ausnahme mit Windows 64-Bit
    • http: // social.msdn.microsoft.com/Forums/en/vsdebug/thread/69a0b831-7782-4bd9-b910-25c85f18bceb
  2. der Fall der verschwindenden OnLoad Ausnahme
  3. Stille Ausnahmen auf x64-Entwicklungsmaschinen (Microsoft Connect)
    • https: // connect.microsoft.com/VisualStudio/feedback/details/357311/silent-exceptions-on-x64-development-machines

Die erste ist, was ich von Google gefunden (nach diesem Thread nicht helfen), und das Gewinde führte mich in die beiden folgenden. Der zweite hat die beste Erklärung, und die dritte ist die Microsoft Bug / Ticket (das wird bekräftigt, dass dieses „by design“ Verhalten ist).

Also, im Grunde, wenn Ihre Anwendung eine Ausnahme auslöst, die auf dem Weg zurück nach oben dem Stapel eine Kernel-Modus-Grenze trifft, wird es an dieser Grenze blockiert. Und das Windows-Team entschieden, der beste Weg, um mit ihm die Ausnahme behandelt wurde, so zu tun war; Ausführung fortgesetzt, als ob alles normal abgeschlossen.

Oh, und dies geschieht überall . Debug gegen Veröffentlichung ist irrelevant. .Net vs C ++ ist irrelevant. Dies ist OS-Level-Verhalten.

Stellen Sie sich einige kritischen Daten auf der Festplatte zu schreiben, aber es funktioniert nicht auf der falschen Seite einer Kernal-Modus-Grenze. Andere Code versucht es später zu verwenden, und wenn Sie Glück haben, erkennen Sie etwas mit den Daten falsch ... aber warum? Ich wette, Sie nie die Ansicht, dass die Anwendung die Daten schreiben fehlgeschlagen --- weil Sie eine Ausnahme zu erwarten geworfen würde.

Jerks.

Andere Tipps

Wenn ich die Antwort über zwei Kontrollkästchen in dem lesen „Exception ...“ Dialog, ging ich zurück und öffnete wieder den Dialog. Ich hatte nur eine Spalte mit Kontrollkästchen -. Für Pause auf „Geworfene“

Wie sich herausstellt, wenn Sie nicht über "My-Code aktivieren Just (Managed Only)" in den Debug-Optionen geprüft, die "User-Unhandle" Spalte zeigt nicht in der "Ausnahmen" Dialog.

Wie wählte ich die „Enable Just My-Code“ Option und bestätigte, dass die „User-unhandled“ Checkbox auf dem „Ausnahmen“ Dialog wurde für alle die Ausnahme Kategorien ausgewählt.

Ich konnte Ausnahmen erhalten unhandled für eine Sitzung in den Debugger zu brechen. Aber als ich am nächsten Tag zurückkommen, war das Verhalten wie zuvor.

Metro.

Ctl-D, bringt E die Ausnahmen Fenster. Sie können festlegen, welche Ausnahmen Sie wollen, und wollen nicht, brechen auf.

Es gibt zwei Kontrollkästchen in den „Ausnahmen ...“ -Box, ich muss in der Regel haben sie beide überprüft es auf nicht behandelte Ausnahmen zu brechen zu bekommen. Unabhängig davon, dass es nur liest sich wie Sie ein überprüft haben müssen.

Wenn jeder während dies auch mir passiert. Es scheint wie ein Bug oder so etwas, wie wenn ich replizieren das Szenario der Ausnahme abgefangen wird und wie üblich gezeigt.

Ich hatte ein ähnliches Problem, und die Überprüfung „Enable Just My-Code (Managed Only)“ das Problem behoben, während, wenn ich es wieder ausgeschaltet dann kam das Problem zurück, keine Ahnung, warum (aber es ist möglich, dass einige DLL, dass erscheinen lassen geladen, wenn es nicht aktiviert Ursache ist das Verhalten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top