繁体   English   中英

如何捕获C ++异常?

[英]How do I catch a C++ exception?

在我的C ++应用程序中,我正在调用System(),这有时会使应用程序崩溃(这是一项服务)。 我想捕获引发的异常并将其记录下来。 我不知道该抓什么,我什至也不能一口气抓:

try
{
   system(myCommand);
}
catch (...)
{
   Log("Error!"); // this is a custom log method
}

那没有记录任何东西。 那不应该捕获所有类型的异常吗? 更重要的是,我如何知道System()方法将抛出什么,以便使我知道要捕获什么?

如果catch(...)没有捕获异常,则不会引发异常。 并非所有错误都会引发异常。 从C时代起, system就一直处于停滞状态,并且绝对不会引发任何异常。

“日志”使用什么功能? 根据您遇到的故障,它可能会干扰您的日志记录功能。 通常,崩溃日志记录应从单独的过程完成。

您应该检查System()调用的文档,以检查它是否定义了exception specification也可以定义抛出什么异常。 但是似乎因为(...)捕获所有内容似乎对您不起作用,所以大多数System()根本不会引发任何异常。 您可以签入以跟踪日志或调试器日志,以查看在System()调用期间出了什么问题。

try / catch仅捕获C ++异常,而不捕获所有异常(即SEH类型的异常)。 如果确定该调用使该服务崩溃,并且在Windows上,您可能想尝试使用结构化异常处理

您可以同时捕获SEH和c ++异常,即HTH。

SEH和C ++异常-一目了然

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM