tfi*_*iga 8 c++ logging exception visual-c++
我有一个c ++应用程序,它在try块中包含大部分代码.当我捕获异常时,我可以将用户返回到稳定状态,这很好.但我不再接收崩溃转储了.我真的想弄清楚代码中的异常发生在哪里,所以我可以记录并修复它.
能够在不停止应用程序的情况下获得转储将是理想的,但我不确定这是否可行.
有什么方法可以找出catch块中抛出异常的位置?如果它有用,我在windows xp及更高版本上使用本机msvc ++.我的计划是简单地将崩溃记录到各个用户的计算机上的文件中,然后在达到一定大小后上载崩溃日志.
使用SEH(结构化异常处理)可以实现这一点.关键是MSVC通过SEH实现C++异常.另一方面,纯SEH更强大,更灵活.
这就是你应该做的.而不是像这样使用纯C++ try/catch块:
try
{
DoSomething();
} catch(MyExc& exc)
{
// process the exception
}
Run Code Online (Sandbox Code Playgroud)
您应该DoSomething使用SEH块包装内部代码块:
void DoSomething()
{
__try {
DoSomethingInner();
}
__except (DumpExc(GetExceptionInformation()), EXCEPTION_CONTINUE_SEARCH) {
// never get there
}
}
void DumpEx(EXCEPTION_POINTERS* pExc)
{
// Call MiniDumpWriteDump to produce the needed dump file
}
Run Code Online (Sandbox Code Playgroud)
也就是说,在C++ try/catch块中,我们放置了另一个原始SEH块,它只转储所有异常而不捕获它们.
有关使用MiniDumpWriteDump的示例,请参见此处.