none
構造化例外処理 ビルドによる違い RRS feed

  • 質問

  • 例外ハンドラは、Releaseビルド時実行されないのでしょうか?

    以下のコードは、Debugビルド時音がでます。しかし、Releaseにすると、何もでません。

    __try {

        DWORD dwDivideByZero = 0;

        DWORD error = 5 / dwDivideByZero;

    }

    __except( EXCEPTION_EXECUTE_HANDLER ) {

        ::MessageBeep(0);

    }

     

    2010年9月20日 8:28

回答

  • Release では最適化によって、意味のない error あたりの演算が削除されているのでは?
    一度、ブレークをかけるか、ステップ実行をした上で、デバッグ - ウィンドウ - 逆アセンブルで表示してみてください。

    たとえば、error の値をコンソールに出力するなどして ”使われていること” を明示するか、DWORD error の前に最適化を抑制する volatile キーワードをつければ、ビープ音が鳴るでしょう。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク ともや 2010年9月20日 15:16
    2010年9月20日 10:49
    モデレータ

すべての返信

  • Release では最適化によって、意味のない error あたりの演算が削除されているのでは?
    一度、ブレークをかけるか、ステップ実行をした上で、デバッグ - ウィンドウ - 逆アセンブルで表示してみてください。

    たとえば、error の値をコンソールに出力するなどして ”使われていること” を明示するか、DWORD error の前に最適化を抑制する volatile キーワードをつければ、ビープ音が鳴るでしょう。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク ともや 2010年9月20日 15:16
    2010年9月20日 10:49
    モデレータ
  • ありがとうございます。

    Azuleanさんがおっしゃるとおり、使われていることを明示すると音がなりました。

    このへんは、逆アセンブル作業も必要になってくるのですね。勉強になります。ありがとうございました。

    2010年9月20日 15:16