Maison >développement back-end >C++ >Pourquoi les exceptions non gérées dans Visual Studio 2010 WinForms sur des fenêtres 64 bits semblent disparaître?
Visual Studio 2010: A Windows 64 bits WinForms Gestion d'exception Enigma
Un problème curieux se pose dans Visual Studio 2010: des exceptions non performes dans les applications WinForms exécutées sur des fenêtres 64 bits disparaissent souvent en silence. L'application continue l'exécution sans le message d'erreur attendu ni la rupture de débogueur.
Comprendre la cause racine
Ce comportement est lié à la couche "Wow64" de Windows, qui émule du code 32 bits sur des systèmes 64 bits. Lorsqu'un gestionnaire de fenêtres 64 bits déclenche un événement (comme l'événement Load
), WOW64 intercepte le code du processus 32 bits. Les exceptions non gérées dans ce code intercepté sont masquées, empêchant le débogueur de les attraper.
Solutions et solutions de contournement
Plusieurs stratégies peuvent résoudre ce problème:
Ajustement de la plate-forme cible: Modifiez la "cible de plate-forme" du projet en "anycpu" (dans Project Properties & gt; build). Cela fait de l'application un processus 64 bits, en contournant WOW64. Remarque: Cela peut entraîner des problèmes de compatibilité avec les dépendances 32 bits.
Paramètres d'exception de débogueur: dans Debug & gt; Exceptions, cochez la case "lancée" pour les exceptions CLR. Cela oblige le débogueur à s'arrêter lorsque des exceptions se produisent.
Charger la gestion de l'exception de l'événement: Enveloppez le code dans le gestionnaire d'événements Load
dans un bloc try-catch
. Dans le bloc catch
, terminez l'application pour vous assurer que l'exception est remarquée.
Gestion des exceptions globales: Utilisez Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
dans votre méthode Main()
. Cela capte des exceptions non gérées en mode débogage, mais pourrait réduire l'efficacité de l'événement ThreadException
.
Revue du gestionnaire d'événements: Considérez si le code problématique a besoin de pour être dans l'événement Load
. Cet événement n'est pas toujours essentiel, et l'utiliser inutilement, en particulier dans VB.NET, peut masquer de meilleurs choix de gestionnaires d'événements.
Mise à niveau du système d'exploitation: La mise à niveau vers Windows 8 ou version ultérieure résout souvent ce problème lié à WOW64.
En mettant en œuvre l'une de ces solutions, vous pouvez effectivement déboguer et gérer les exceptions non gérées dans vos applications WinForms Visual Studio 2010 sur des fenêtres 64 bits.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!