Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 VS2008调试器不会因未处理的异常而中断_Visual Studio 2008_Debugging_Unhandled - Fatal编程技术网

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

Visual studio 2008 VS2008调试器不会因未处理的异常而中断,visual-studio-2008,debugging,unhandled,Visual Studio 2008,Debugging,Unhandled,我的vs调试器有一个奇怪的问题。在vs调试器下运行我的程序时,调试器不会因未处理的异常而中断。相反,控制返回到VS,就好像程序正常退出一样。如果我查看output选项卡,就在线程终止之前列出了第一次机会验证 我了解如何使用调试菜单中的“异常”框。我已检查未处理异常的中断。如果我检查正在发生的特定异常的首次机会异常,调试器将停止 然而,我的理解是,调试器也应该在任何“未处理的异常”时停止。这不是为了我 以下是“我的输出”选项卡的最后几行: A first chance exception of t

我的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错误

有什么想法吗


Metro.

在“异常…”框中有两个复选框,我通常必须同时选中这两个复选框才能在未处理的异常中中断。不管它读起来像是只需要检查一个。

Ctl-D,E将打开异常窗口。你可以设置你想要的和不想要的例外情况。每当这种情况发生在我身上时,你也可以设置一次。这看起来像是一个bug或什么的,因为当我复制场景时,异常会像往常一样被捕获和显示。

当我读到关于在“异常…”对话框中有两个复选框的答案时,我返回并再次打开对话框。我只有一列复选框——用于“抛出”的中断

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

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

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


Metro。

如果您使用的是64位操作系统,那么很有可能您被导致异常消失的操作系统级行为所困扰。复制它最可靠的方法是创建一个新的WinForm应用程序,该应用程序只在OnLoad中抛出一个异常;它似乎不会被抛出。看看这些:

  • Visual Studio不会在windows 64位的未处理异常上中断
    • http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/69a0b831-7782-4bd9-b910-25c85f18bceb
  • x64开发计算机上的静默异常(Microsoft Connect)
    • https://connect.microsoft.com/VisualStudio/feedback/details/357311/silent-exceptions-on-x64-development-machines
  • 第一个是我从谷歌找到的(在这个帖子没有帮助之后),这个帖子让我找到了下面两个。第二个是最好的解释,第三个是微软的bug/ticket(它再次确认这是“设计”行为)

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

    哦,这在任何地方都会发生。调试与发布是不相关的。NET与C++无关。这是操作系统级别的行为

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

    我有一个类似的问题,检查“仅启用我的代码(仅管理)”修复了该问题,而如果我将其关闭,则问题再次出现,不知道原因(但可能是某些DLL在未选中时加载导致该行为)。

    我保证,这不是出于恶意!替代方案是让你的机器运行额外、超慢(不断保存完整的注册上下文),或者在用户模式回调中发生SEH异常时让你的应用程序崩溃。好消息是,用户模式回调仅在窗口过程中(*),因此这不会影响服务应用程序,也不会影响工作线程(即任何非窗口线程)@Paul-我确实更喜欢“instacrash”。至少我现在知道自己有点偏执了。@PaulBetts你关于这个问题的博文声称Windows 7解决了这个问题,因为你从程序兼容性助手那里得到了一个一次性弹出窗口。这是一种奇怪的“修复”。更像是一个小小的创可贴。当然,一个真正的“修复”将允许您像往常一样再次开始调试这些异常。@Jez一次性弹出窗口仅适用于没有Win7清单的应用程序。新开发应该总是有一个Win7清单,这意味着您将能够调试这些异常,因为您将得到(期望的)崩溃behavior@PaulBetts有趣。只是我还是不能让它工作。使用VS2013,在全新Windows窗体应用程序的属性中选择“使用默认设置嵌入清单”,仍然会忽略Form1_加载中引发的异常。添加
    app.manifest
    ,取消对Win7兼容性的注释,并在属性中选择该清单,仍然会忽略Form1_Load中引发的异常。请参阅我的文章,其中可能与“仅启用我的代码”设置本身有关,因此,在后一个会话中,该设置可能以某种方式被恢复