我们有以下格式的代码部分:
try
{
// code
}
catch(std::exception &e)
{
// log exception
}
catch(...)
{
// log unknown exception.
}
每隔一段时间,未知异常代码就会触发,并记录一个未知异常。
我一直认为所有异常都是从std :: exception派生的,因此捕获std :: exception会捕获所有异常。
我应该抓住其他一些例外吗?
如果我的代码最终出现在未知的异常处理程序中,有什么方法可以找出实际捕到的异常?
修改
我们设法找到问题的原因 - 尽管他们说过,客户没有安装我们的代码所依赖的.NET 3.5,并且在尝试使用XML解析器时系统崩溃了。
答案 0 :(得分:0)
我应该抓住其他一些例外吗?
这取决于您的代码。您调用的库可以抛出不是从std :: exception派生的异常,例子是MFC的CException
或Microsoft的_com_error
。此外,catch(...)
可能会导致访问冲突,这就是为什么我不会在我的代码中使用catch(...)
的原因 - 这只是为了我的广泛。
2.如果我的代码最终出现在未知异常处理程序中,有什么方法可以找出实际捕到的异常?
您可以在调试器中运行代码并配置调试器以在抛出异常时中断程序(第一次机会)。然后你就确切地知道哪一行代码触发了异常,并且应该能够看到究竟抛出了什么。