代码之家  ›  专栏  ›  技术社区  ›  Metro

VS2008调试器不会因未处理的异常而中断

  •  2
  • Metro  · 技术社区  · 18 年前

    我的vs调试器有一个奇怪的问题。在vs调试器下运行我的程序时,调试器不会因未处理的异常而中断。相反,控制返回到VS,就好像程序正常退出一样。如果我查看output选项卡,就在线程终止之前列出了第一次机会验证。

    我了解如何使用调试菜单中的“异常”框。我已检查未处理异常的中断。如果我检查正在发生的特定异常的首次机会异常,调试器将停止。

    以下是“我的输出”选项卡的最后几行:

    A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
    The thread 0x60c has exited with code 0 (0x0).
    The program '[3588] ALMSSecurityManager.vshost.exe: Managed' has exited with code -532459699 (0xe0434f4d).
    

    我不明白为什么这个异常在未处理时会被标记为“第一次机会”异常。

    我认为0xe0434f4d退出代码是一个通用的COM错误。

    有什么想法吗?

    地铁

    6 回复  |  直到 18 年前
        1
  •  6
  •   Metro    18 年前

    事实证明,如果在调试选项中没有选中“仅启用我的代码(仅管理)”,则“用户未处理”列不会显示在“异常”对话框中。

    我选择了“仅启用我的代码”选项,并验证“异常”对话框上的“用户未处理”复选框是否已为所有异常类别选中。

    我能够让未处理的异常进入调试器进行一次会话。但当我第二天回来时,我的行为和以前一样。

    地铁

        2
  •  5
  •   Granger    15 年前

    1. Visual Studio不会在windows 64位的未处理异常上中断
      • http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/69a0b831-7782-4bd9-b910-25c85f18bceb
    2. The case of the disappearing OnLoad exception
    3. x64开发计算机上的静默异常(Microsoft Connect)

    第一个是我从谷歌找到的(在这个帖子没有帮助之后),这个帖子让我找到了下面两个。第二个是最好的解释,第三个是微软的bug/ticket(它再次确认这是“设计”行为)。

    因此,基本上,如果您的应用程序在返回堆栈的过程中抛出一个碰到内核模式边界的异常,它将在该边界处被阻塞。Windows团队决定最好的处理方法是假装异常已被处理;执行继续,好像一切正常完成。

    哦,这是常有的事 处处

    假设您必须将一些关键数据写入磁盘,但它在内核模式边界的错误一侧失败。其他代码稍后会尝试使用它,如果幸运的话,您会检测到数据有问题……但为什么呢?我敢打赌,你永远不会认为你的应用程序写不出数据---因为你预期会有一个异常被抛出。

    混蛋。

        3
  •  2
  •   user1228 user1228    18 年前

        4
  •  0
  •   hova    18 年前

    “Exceptions…”框中有两个复选框,我通常必须将它们都选中,以使其在未处理的异常上中断。不管它读起来像是你只需要检查一个。

        5
  •  0
  •   Morten Christiansen    18 年前

        6
  •  0
  •   yoel halb    14 年前