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将捕获所有异常

  • 是否还有其他例外情况需要我关注

  • 如果我的代码最终出现在未知异常处理程序中,是否有任何方法可以找出实际捕获的异常

  • 编辑

    我们设法找到了问题的原因——尽管说他们已经安装了,但客户还没有安装.NET3.5,这是我们的代码所依赖的,系统在尝试使用XML解析器时失败了

    是否还有其他例外情况需要我关注

    这取决于您的代码。您调用的库可以抛出非从std::exception派生的异常,例如MFC的
    ceexception
    或Microsoft的
    \u com\u error
    。另外,访问冲突可能会被
    catch(…)
    捕获,这就是为什么我不在代码中使用
    catch(…)
    的原因-这对我来说太广泛了

    2.如果我的代码最终出现在未知异常处理程序中,是否有任何方法可以找出实际捕获的异常


    您可以在调试器中运行代码,并将调试器配置为在引发异常时中断程序(第一次)。然后您确切地知道哪一行代码触发了异常,并且应该能够查看到底抛出了什么。

    您所说的“非用户异常”是什么?我不熟悉这个词。找出未知异常的最简单方法是不使用
    catch(…)
    处理程序。允许例外在调试器中结束。我的意思是C++之类的运行库所引发的任何异常。等等,即我没有写的东西,C++运行时库确实会抛出从<代码> STD::异常< /代码>中得到的异常。所以你的未知异常不是其中之一。最有可能的是,您有一个直接的访问冲突,MSVC在
    catch(…)
    子句中捕捉到了该冲突。基本上,您的程序中有一个bug,您应该查找并修复;有一个
    catch(…)
    子句会使这变得更困难。错误是偶尔出现的,每6个月一次,仅在客户站点类型异常上出现,因此在调试器下运行它实际上是不可能的。我猜这是一个访问冲突。在这种情况下,我将删除捕获(…),并要求客户激活DrWatson。当访问冲突发生时,这将为您提供崩溃转储,您可以深入挖掘(如果您向客户提供带有调试信息的版本,例如作为PDB文件,并且如果您保留中间文件以更好地跟踪汇编代码)。