ホームページ >バックエンド開発 >C++ >VS2010を使用して、64ビットWindows Winformsアプリケーションで例外メッセージが欠けているのはなぜですか?

VS2010を使用して、64ビットWindows Winformsアプリケーションで例外メッセージが欠けているのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-02-01 22:06:11187ブラウズ

Why are Exception Messages Missing in 64-bit Windows WinForms Applications using VS2010?

vs2010 64- winformsアプリケーションの下でのビットウィンドウは、問題の詳細な分析と解決策

Visual Studio 2010を使用して、64ビットWindowsシステムに新しいWindowsフォームアプリケーションを作成すると、表示されておらず準備ができていない問題に遭遇する可能性があります。コードがロードイベント処理プログラムのコードで処理されていない場合、プログラムは問題コードラインをスキップし、エラーなしで実行され続けます。これは、予想されるデバッガーの中断の動作や、ブロースされていない情報の異常な表示とは異なります。

根本原因分析

この異常な動作は、64ビットシステムで実行されている32ビットコードと対話するために、WOW64(Windows-on-Windows 64ビット)シミュレーションレイヤーに由来しました。 64ビットウィンドウマネージャーが通知をトリガーすると、応答コード(ロードイベント処理プログラムなど)が32ビット環境で実行されます。この32ビットコードで異常が発生した場合、WOW64レイヤーは異常を飲み込み、デバッガーがそれを検出するのを防ぐことができます。 解決策と変更方法

プラットフォームターゲットをanyCPUとして設定し、選択した「32ビットを好む」:

をキャンセルする
  1. プロジェクト&gt>

    プラットフォームターゲットをAnyCPUに設定します。

    「最初の選択肢32 -bit」をキャンセルします。
    • これにより、義務アプリケーションが64ビットプロセスとして動作し、WOW64異常な抑制の問題を排除します。
    • 必須デバッガーは異常で中断されます:
  2. debug>
  3. CLR異常を選択する「原因」チェックボックスを選択します。 これにより、これにより、ロードイベント処理プログラムの位置に関係なく、CLR異常なラインで必須デバッガーの実行が停止されます。

    • ロードイベント処理プロセスに異常な治療を追加:
    • トライキャッチブロックを使用して、ロードイベント処理の問題コードを包囲します。
  4. Failfastを使用して、Catchブロックにエラーメッセージを表示し、アプリケーションを突然終了します。
  5. デバッグ中のWow64異常なキャプチャを無効にする:
    • メイン()メソッドに追加:
    • これは、デバッグ中のメッセージサイクルで無効にされる異常なキャプチャを無効にします。
      • Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);ロードイベント処理手順の使用を回避することを検討してください:
    • reは、コードを実際にロードイベント処理プログラムに配置する必要があるかどうかを評価します。

      通常、ユーザーの設定やウィンドウサイズに依存しない初期化タスクは、コンストラクターで処理する必要があります。
  6. 追加の説明: Windows 8以上のバージョンでは、この問題が解決されました。したがって、新しいオペレーティングシステムに更新することもソリューションを提供する場合があります。

以上がVS2010を使用して、64ビットWindows Winformsアプリケーションで例外メッセージが欠けているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。