在未處理的C++例外,我想打印的事件:我可以從Windows SEH異常中解碼C++異常嗎? (?如果是的話,如何)
- C++異常
- 堆棧跟蹤的消息(
what()
)。
爲了獲得堆棧跟蹤,我結合使用SetUnhandledExceptionFilter
與StackWalker庫:
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);
}
我已經得到堆棧跟蹤打印就好了,但現在越來越what
是難。
是否有某種方法可以將SEH異常解碼爲C++異常,以便在終止之前調用此成員函數?
你會得到3個ExceptionInformation單詞。第二個是指向異常對象的指針。你沒有希望解釋它,沒有像C++中的反射那樣的東西。 * catch *關鍵字發出的異常過濾器非常重要。 –
@Hans:假如拋出的東西總是來自'std :: exception'(這對許多代碼庫來說都是這樣),那麼它是不是可以被解釋?一旦你有一個'std :: exception',你可以'dynamic_cast'到特定的異常類型,如果需要的話...... –
強制轉換爲* what * exception?這是關鍵。你可能會得到*什麼*。 –