【发布时间】:2014-06-25 22:37:15
【问题描述】:
我的应用程序在初始化时崩溃的测试仪出现问题。我添加了更多的日志记录和异常处理,但它仍然崩溃并显示通用的“此程序已停止工作”消息,而不是触发我的错误处理。
鉴于我的 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 渲染的库,我认为这是出了问题。
【问题讨论】:
-
我不确定我是否理解。你怎么知道这是一个未捕获的异常?
-
因为
handleApplicationError没有被调用(它引发了一个 MessageBox 并杀死了我的启动画面,这些都没有发生) -
但是为什么不能只是其他类型的程序崩溃呢?
-
对不起,我误会了。我的理解是
catch(...)应该让我在 任何事情 出错时让我重新获得控制权,或者更确切地说,我在问在什么情况下不 是真的。 -
啊,不。在 C++ 中,异常是一种非常特殊的编程语言机制。这不像是硬件例外。您必须专门使用
throw语句来引发异常。因此,例如,任何类型的未定义行为(如空指针取消引用等)通常不会导致抛出 C++ 异常。
标签: c++ visual-c++ opengl exception-handling crash