Heim >Backend-Entwicklung >C++ >Warum fehlen unbehandelte Ausnahmen in meiner 64-Bit-VS2010-WinForms-Anwendung?

Warum fehlen unbehandelte Ausnahmen in meiner 64-Bit-VS2010-WinForms-Anwendung?

Patricia Arquette
Patricia ArquetteOriginal
2025-02-01 22:16:13470Durchsuche

Why Are Unhandled Exceptions Missing in My 64-bit VS2010 WinForms Application?

Debugging 64-Bit-WinForms-Apps in VS2010: fehlende ungehandelte Ausnahmen

Debuggen einer neuen 64-Bit-Windows-Winform-Anwendung in Visual Studio 2010? Möglicherweise sind nicht behandelte Ausnahmen nicht den Debugger ausgelöst. Dies liegt an der WOW64-Emulationsschicht, die Ausnahmen in Code abfängt, die auf 64-Bit-Fenstermanager-Benachrichtigungen reagieren (wie das Form1_Load Ereignis).

Ursache und Auswirkung

Das Problem stammt aus der Unfähigkeit von Windows, Ausnahmen korrekt zu verarbeiten, die sich von 32-Bit (Ihrer App) bis 64-Bit-Code (der Benachrichtigungsquelle) bewegen. Dies erschwert das Debuggen, da die Ausnahme für den Debugger unsichtbar ist.

Lösungen

Hier gibt es verschiedene Möglichkeiten, dies anzusprechen:

  • Ziel AnyCPU, Deaktivieren Sie die 32-Bit-Präferenz: Festlegen des Plattform-Ziels Ihres Projekts auf "AnyCPU" und das Unentfeuern "Bevorzugen Sie" 32-Bit "erzwingt einen 64-Bit-Prozess, wobei das WOW64-Problem umgeht. HINWEIS: Dies deaktiviert "Bearbeiten und Fortfahren" in VS-Versionen vor 2013 und kann Probleme mit 32-Bit-Abhängigkeiten verursachen.
  • Aktivieren Sie die CLR -Ausnahme -Wurf: Im Fenster "Ausnahmen" des Debuggers (Debugg & gt; Ausnahmen) überprüfen Sie das Feld "geworfen" für CLR -Ausnahmen. Dies zwingt einen Haltepunkt bei der Ursprung der Ausnahme.
  • Wrap Load Ereignis in try/catch: Einschließen Sie Ihren Load Ereignishandlercode in einen try/catch -Block. Verwenden Sie Environment.FailFast() im block catch für einen kontrollierten Absturz mit einem detaillierten Bericht.
  • Einstellen UnhandledExceptionMode: In Ihrer Main() -Methode rufen Sie Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) auf, um zu verhindern, dass die Nachrichtenschleife die Ausnahme während des Debuggens unterdrückt.
  • Bewerten Sie die Ereignisverwendung neu: Load Überlegen Sie, ob der Ereignishandler wirklich seinen gesamten Code benötigt. Das Verschieben einiger Aktionen in den Konstruktor könnte helfen. Load
  • Upgrade auf Windows 8 oder höher: Neuere Windows -Versionen befassen sich mit dem WOW64 -Problem.
Diese Lösungen beheben das zugrunde liegende Problem nicht, bieten jedoch praktische Wege, um uneingeschränkte Ausnahmen in diesem Szenario zu debuggen.

Das obige ist der detaillierte Inhalt vonWarum fehlen unbehandelte Ausnahmen in meiner 64-Bit-VS2010-WinForms-Anwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn