ホームページ > バックエンド開発 > C++ > 64ビットウィンドウのVS2010 Winformsアプリで、未処理の例外が抑制されるのはなぜですか?

64ビットウィンドウのVS2010 Winformsアプリで、未処理の例外が抑制されるのはなぜですか?

Mary-Kate Olsen
リリース: 2025-02-01 22:11:09
オリジナル
293 人が閲覧しました

Why Are Unhandled Exceptions Suppressed in My VS2010 WinForms App on 64-bit Windows?

64ビットvs2010 Winformsアプリケーションで、未解決の例外をデバッグ

64ビットウィンドウでVS2010でWinFormsアプリケーションを開発することは、課題を提示する可能性があります。デバッガーは、ハンドルされていない例外を表示できない場合があります。これは、Windows-on-Windows(wow64)エミュレーションレイヤーに関連する既知の問題です。

ソリューション:

このイライラする問題に対処する方法は次のとおりです

    ターゲットANYCPU(64ビット):プロジェクトのプロパティ(プロジェクト>プロパティ>ビルド)で、「プラットフォームターゲット」を「anycpu」に変更し、「32ビットを選択します。」 ネイティブ64ビットプロセスとして実行されると、Wow64の制限をバイパスします
  1. CLR例外のために「スロー」を有効にする例外ウィンドウ(debug>例外)を開き、共通言語ランタイム(CLR)の例外については「スローされた」ボックスをチェックします。これにより、デバッガーが例外の起源で壊れることが保証されます。

  2. Form1のロードイベント(またはコンストラクター)の例外を処理します:

    イベントハンドラー(または、できればコンストラクター)内のブロックにコードをラップします。 ブロックでは、

    を使用してアプリケーションをすぐに終了し、明確なフィードバックを提供します。
  3. try-catchForm1_Loadメソッドでは、catchを追加します。これにより、メッセージループがデバッグ中に例外処理を妨げることを防ぎます。 Application.Exit()

  4. イベントハンドラーの配置を再評価します:

    イベントがコードに最適な場所であるかどうかを検討してください。コンストラクターは、より適切な場所になる可能性があります。Application.SetUnhandledExceptionMode Main() Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

    アップグレード(可能であれば):
  5. 後のWindowsバージョンがこのWOW64問題に対処した可能性があります。
  6. 根本原因を理解する:Load

  7. この例外の可視性の欠如は、WOW64環境内の32ビットから64ビットコードに例外を通過することの難しさに起因する文書化されたQuirkです。 これらの回避策は役立ちますが、根本的な問題は、Microsoftのチーム間で進行中の議論の対象となっています。

以上が64ビットウィンドウのVS2010 Winformsアプリで、未処理の例外が抑制されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート