タグ

SEHに関するbabydaemonsのブックマーク (4)

  • 構造化例外処理(SEH)について with DirectX - Qiita

    普通の例外 ゼロ徐算やアクセス違反などの低レベルな例外(SE)を取ることができません。クラッシュしてしまいます。 try { throw std::exception("hoge"); } catch (exception capture) { std::cout << capture.what() << std::endl; } catch (...) { std::cout << "Unknown" << std::endl; } finally { ... } _EXCEPTION_POINTERS* info = nullptr; __try { auto hoge = 1 / ZERO; // 0徐算 nullObject->Invoke(); // アクセス違反 } __except(info = GetExceptionInformation(), EXCEPTION_EXE

    構造化例外処理(SEH)について with DirectX - Qiita
    babydaemons
    babydaemons 2021/06/03
    “_set_se_translator EHaを有効化したうえでこれを登録しておくことで、好きな例外の形式に変換できます。”
  • VC++構造化例外メモ(Hishidama's VC++2005 SEH Memo)

    これらはマクロなので、実際は整数が割り当てられている。 しかし__except()は正か0か負かという判断しかしてないらしいので、実はどんな値でもよい…? とは言え、上記のようなマクロが定義されているんだから、それを指定するべきだろう。 という訳で、__exceptの括弧内に式(MSDNではフィルタ式と称している)を書いて最終的に整数を返すことにより、条件に応じて処理を変更することが出来る。 例えばカンマ演算子を使ったり、独自の別関数(MSDNではフィルタ関数と称している)を呼び出したりすればよい。 _EXCEPTION_POINTERS* info; __try { 処理; } __except (info = GetExceptionInformation(), EXCEPTION_EXECUTE_HANDLER) { //構造化例外の情報をinfoに入れている。 //カンマ演算子では

  • C++ 例外処理と構造化例外処理 (2) - Web/DB プログラミング徹底解説

    構造化例外から C++ 例外への明示的な変換 前回は構造化例外処理 (SEH) における例外と C++ 例外は異なるものであることを説明しました。 考えてみれば名前からして別物なのですが同じ「例外」ですし、さらに /EHa コンパイラオプションの元では、 SEH も (キャッチできれば) キャッチしますから、混乱するのは当然ともいえます。 今回は SEH が発生したときに、C++ 例外を明示的にスローするための方法を説明します。 _set_se_translator 関数による変換関数の指定 Visual C++ では _set_se_translator 関数 が用意されています。 これに変換関数を渡すと、構造化例外が発生したときにその変換関数が呼び出されるようになります。 そして、変換関数で C++ 例外をスローすればよいのです。 変換関数の型は次の通りです。 typedef void

    C++ 例外処理と構造化例外処理 (2) - Web/DB プログラミング徹底解説
  • 構造化例外処理 ~ 例外情報の取得 - Web/DB プログラミング徹底解説

    例外 (SEH) が発生した際、例外フィルタにて GetExceptionInformation を用いて、その例外の情報を取得することが可能です。 GetExceptionInformation は例外フィルタでしか参照することはできません。 LPEXCEPTION_POINTERS GetExceptionInformation(void); GetExceptionInformation は EXCEPTION_POINTERS へのポインタを返します。 EXCEPTION_POINTERS の定義は次です。 typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; PCONTEXT ContextRecord; } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;

    構造化例外処理 ~ 例外情報の取得 - Web/DB プログラミング徹底解説
  • 1