:Windows SEH例外からC++例外をデコードできますか? (?もしそうなら、どのように)私が印刷したい未処理のC++の例外が発生した場合
- C++例外
- スタックトレースのメッセージ(
what()
)。
スタックトレースを取得するためには、私はStackWalkerライブラリと組み合わせてSetUnhandledExceptionFilter
を使用しています:私はちょうど罰金印刷するスタックトレースを得ているが、今what
をされてき
struct FooStackWalker : StackWalker
{
virtual void OnCallstackEntry(CallstackEntryType, CallstackEntry &entry) override
{
std::cerr << entry.lineFileName << " (" << entry.lineNumber << "): " << entry.undFullName << std::endl;
}
};
LONG WINAPI UnhandledExceptionHandler(LPEXCEPTION_POINTERS pointers)
{
FooStackWalker walker;
walker.ShowCallstack(::GetCurrentThread(), pointers->ContextRecord);
::TerminateProcess(::GetCurrentProcess(), 1);
}
int main()
{
::SetUnhandledExceptionFilter(UnhandledExceptionHandler);
}
難しい
終了前にこのメンバー関数を呼び出すために、C++例外としてSEH例外をデコードする方法はありますか?
あなたは3つのExceptionInformation単語を正しく取得するでしょう。 2ndは例外オブジェクトへのポインタです。あなたはそれを解釈する希望がありません.C++でのリフレクションなどはありません。 * catch *キーワードによって生成される例外フィルタは非常に重要です。 –
@ハンス:スローされるものが常に 'std :: exception'(多くのコードベースで当てはまります)から導かれると仮定すると、それは解釈できませんか? 'std :: exception'を取得したら、必要に応じて特定の例外タイプに' dynamic_cast'を実行できます。 –
* what * exceptionにキャストしますか?それが鍵です。あなたは*何*を得るかもしれません。 –