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?

Pourquoi les exceptions non gérées dans Visual Studio 2010 WinForms sur des fenêtres 64 bits semblent disparaître?

Linda Hamilton
Linda Hamiltonoriginal
2025-02-01 22:21:12270parcourir

Why Unhandled Exceptions Vanish in VS2010 WinForms Apps (64-bit Windows)

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn