C 未处理的异常

新手上路,请多包涵

如果发生未处理的异常,C++ 是否提供了一种“显示”视觉效果的方法?

我想要做的是制作类似 assert(unhandled exception.msg()) 如果它真的发生(如以下示例):

 #include <stdexcept>

void foo() {
   throw std::runtime_error("Message!");
}

int main() {
 foo();
}

我希望这种代码不会立即终止(因为未处理异常),而是显示自定义断言消息(实际上是 Message! )。

那可能吗?

原文由 Yippie-Ki-Yay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 819
2 个回答

标准没有规定实际显示未捕获异常的消息的方法。但是,在许多平台上,无论如何都是可能的。在 Windows 上,您可以使用 SetUnhandledExceptionFilter 并提取 C++ 异常信息。使用 g++(无论如何的适当版本),终止处理程序可以使用以下代码访问未捕获的异常:

    void terminate_handler()
   {
       try { throw; }
       catch(const std::exception& e) { log(e.what()); }
       catch(...) {}
   }

确实 g++ 的默认终止处理程序做了类似的事情。您可以使用 set_terminate 设置终止处理程序。

简而言之,没有通用的 C++ 方法,但有一些方法取决于您的平台。

原文由 Logan Capaldo 发布,翻译遵循 CC BY-SA 2.5 许可协议

Microsoft Visual C++ 允许您 像这样 挂钩未处理的 C++ 异常。这是 标准的 STL 行为

您通过调用 set_terminate 来设置处理程序。建议您的处理程序不要做太多工作,然后终止程序,但我不明白为什么您不能通过断言发出信号 - 尽管您无权访问导致问题的异常。

原文由 Steve Townsend 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏