Visual c++ windows C+中无法识别的异常+;密码
我们有以下格式的代码部分:Visual c++ windows C+中无法识别的异常+;密码,visual-c++,Visual C++,我们有以下格式的代码部分: try { // code } catch(std::exception &e) { // log exception } catch(...) { // log unknown exception. } 每隔一段时间,未知异常代码就会触发并记录未知异常 我一直认为所有异常都是从std::exception派生的,因此捕获std::exception将捕获所有异常 是否还有其他例外情况需要我关注 如果我的代码最终出现在未知异常处理程序中,是否有任
try
{
// code
}
catch(std::exception &e)
{
// log exception
}
catch(...)
{
// log unknown exception.
}
每隔一段时间,未知异常代码就会触发并记录未知异常
我一直认为所有异常都是从std::exception派生的,因此捕获std::exception将捕获所有异常
ceexception
或Microsoft的\u com\u error
。另外,访问冲突可能会被catch(…)
捕获,这就是为什么我不在代码中使用catch(…)
的原因-这对我来说太广泛了
2.如果我的代码最终出现在未知异常处理程序中,是否有任何方法可以找出实际捕获的异常
您可以在调试器中运行代码,并将调试器配置为在引发异常时中断程序(第一次)。然后您确切地知道哪一行代码触发了异常,并且应该能够查看到底抛出了什么。您所说的“非用户异常”是什么?我不熟悉这个词。找出未知异常的最简单方法是不使用
catch(…)
处理程序。允许例外在调试器中结束。我的意思是C++之类的运行库所引发的任何异常。等等,即我没有写的东西,C++运行时库确实会抛出从<代码> STD::异常< /代码>中得到的异常。所以你的未知异常不是其中之一。最有可能的是,您有一个直接的访问冲突,MSVC在catch(…)
子句中捕捉到了该冲突。基本上,您的程序中有一个bug,您应该查找并修复;有一个catch(…)
子句会使这变得更困难。错误是偶尔出现的,每6个月一次,仅在客户站点类型异常上出现,因此在调试器下运行它实际上是不可能的。我猜这是一个访问冲突。在这种情况下,我将删除捕获(…),并要求客户激活DrWatson。当访问冲突发生时,这将为您提供崩溃转储,您可以深入挖掘(如果您向客户提供带有调试信息的版本,例如作为PDB文件,并且如果您保留中间文件以更好地跟踪汇编代码)。