我的测试仪遇到问题,我的应用程序在初始化时崩溃。我添加了更多的日志记录和异常处理,但它仍然崩溃并显示通用的“此程序已停止工作”消息,而不是触发我的错误处理。
鉴于我的 main() 看起来像这样并且有catch(...)
什么情况下不会触发?
try{
simed::CArmApp app(0, cmd);
for(bool done = false;!done;)
{
done = !app.frame();
}
} catch(const std::runtime_error &e){
handleApplicationError(e.what());
return -1;
} catch(...) {
handleApplicationError("Unknown Error");
return -999;
}
我的代码正在调用一个进行 OpenGL 渲染的库,我认为这是出了问题的地方。
如果是 C++catch(...)
块没有捕获错误,可能是因为 Windows 错误。
在Windows上有一个概念叫做结构化异常处理 http://msdn.microsoft.com/en-us/library/windows/desktop/ms680657(v=vs.85).aspx这就是当发生不好的事情时操作系统引发“异常”的地方,例如取消引用无效的指针、除以零等。我说“异常”是因为这些不是 C++ 异常;而是因为它们不是 C++ 异常。相反,这些是 Windows 以 C 风格方式定义的严重错误 - 这是因为 Win32 是用 C 编写的,因此 C++ 异常不可行。
也可以看看:
- C++ 异常和结构化异常之间的区别 https://stackoverflow.com/questions/3786647/difference-between-a-c-exception-and-structured-exception
- try- except 语句 https://learn.microsoft.com/en-us/cpp/cpp/try-except-statement?view=msvc-170
- 获取堆栈跟踪的方法EXCEPTION_POINTERS struct http://www.codeproject.com/Articles/41923/Get-the-call-stack-when-an-exception-is-being-caug
根据评论更新
如果您想要 C++ 异常处理和 SEH,也许您可以尝试以下(未经测试的)代码:
__try
{
try
{
// Your code here...
}
catch (std::exception& e)
{
// C++ exception handling
}
}
__except(HandleStructuredException())
{
// SEH handling
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)