Mr.*_*Boy 12 c++ opengl crash exception-handling visual-c++
我的测试人员遇到问题,我的应用程序在初始化时崩溃了.我添加了更多的日志记录和异常处理,但它仍然与通用的"此程序已停止工作"消息崩溃,而不是触发我的错误处理.
鉴于我的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;
}
Run Code Online (Sandbox Code Playgroud)
我的代码正在调用一个执行OpenGL渲染的库,这是我认为出错的地方.
Pet*_*nks 15
如果C++ catch(...)块没有捕获错误,可能是因为Windows错误.
在Windows上有一个名为结构化异常处理的概念,操作系统在发生不良事件时会引发"异常",例如解除引用无效的指针,除以零等.我说"异常",因为它们不是C++异常; 相反,这些是Windows以C风格方式定义的关键错误 - 这是因为Win32是用C语言编写的,所以C++异常不可行.
也可以看看:
根据评论更新
如果您想要C++异常处理和SEH,也许您可以尝试以下(未经测试的)代码:
__try
{
try
{
// Your code here...
}
catch (std::exception& e)
{
// C++ exception handling
}
}
__except(HandleStructuredException())
{
// SEH handling
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我知道,至少有两种情况catch(...)无法实际捕获
unexpected则将调用哪些调用abort.