【问题标题】:Visual Studio does not break with exception assistant, but just stops the processVisual Studio 不会中断异常助手,只是停止进程
【发布时间】:2009-09-10 16:21:13
【问题描述】:

通常,Visual Studio 在遇到未处理的异常时会中断并显示异常助手窗口。

但在某些情况下,Visual Studio 只是停止正在运行的程序,不会中断或显示异常帮助程序。

异常选项 (Ctrl+Alt+E) 配置正确:所有项目都选中“用户未处理”,未选中“抛出”。在调试选项中,我启用了异常助手。

因为它只发生在某些情况下,我试图弄清楚 Visual Studio 何时进入其“故障异常助手状态”。

编辑:

看起来故障异常助手 ghost 只出现在 winforms 应用程序中,并且只有在调用 Web 服务或打开数据库连接等外部操作之后才会出现。

结束编辑

在打开 ADODB 连接之前,异常助手工作正常:

var conn = new ADODB.Connection();
conn.Open("Provider=SQLOLEDB;Server=localhost;Database=db;UID=user;PWD=pw;", "", "", -1);
throw new InvalidOperationException();

执行 conn.Open 语句后,异常助手永远不会启动。

这听起来对任何人来说都很熟悉,更重要的是:有没有人有解决这个问题的方法?可以想象,如果应用程序总是因为异常而退出,那么调试应用程序会变得非常困难。

【问题讨论】:

  • 到目前为止没有回复,所以我想知道:这只是我机器的问题,还是其他人能够使用上面提供的代码重现此行为?如果有人可以对此进行测试,我将不胜感激。创建一个引用 adodb 的新项目,并将代码示例复制到其中。调试应该在 throw 语句上停止(而不是中断)。
  • 希望您能得到答复。在让 Visual Studio 宏工作时,我遇到的情况听起来像您的情况。我正在尝试按照在这个问题中的方式将横幅添加到源代码文件中:stackoverflow.com/questions/415101/…

标签: visual-studio visual-studio-2008


【解决方案1】:

我不完全确定导致这种行为的原因 - 但我刚刚发生了完全相同的事情。

这个答案的简短版本:

重新安装 Visual Studio 2008 sp1。如果你还没有安装,那么我想你可以修复你的 VS 安装,或者现在简单地应用 sp1,它应该可以修复它。

加长版:

我的代码中有异常,并且 Visual Studio 在异常发生时没有显示调试助手 - 相反,我会看到 Windows 错误报告对话框,并提示我是否要调试进程!如果我告诉 VS 在抛出所有异常时中断它会起作用(但这不是调试应用程序的方法)。

奇怪的是,在同一台机器上我已经能够调试在 IIS7.5 中运行的 WCF 服务 - 所以我无法理解它。

经过无数次咒骂和反复尝试,我禁用了 Windows 错误报告。尽管如此,对话框还是会出现,并且 VS 不会因异常而中断。

所以我禁用了 Windows 错误报告服务(它是按需启动的)——这一次应用程序将简单地退出而不显示对话框——但 VS 仍然不会因异常而中断。

最后,我认为可能是 VS 存在配置问题 - 所以我重新应用了 Visual Studio 2008 sp1,现在它又可以正常工作了。

【讨论】:

  • 我已经尝试过重新安装 vs2008,但是没有帮助。但是重新安装后,我仍然有自己的设置。你做了什么来删除设置?
  • 今天我发现我还没有安装SP1。我现在已经安装了,但应用程序仍然只是在异常退出而不是 VS 显示调试助手
  • 抱歉耽搁了——真的需要打开电子邮件通知!如果您检查 Debug-->Exceptions 菜单上“Thrown”列下的所有 .Net 异常,行为是否会停止?如果是这样,那么某个地方的异常过滤器可能会发生一些奇怪的事情。您可以通过打开工具-->选项-->导入和导出设置来重置所有环境设置。底部选项是重置所有设置。不过,您应该导出当前配置,以便在执行此操作之前有选择地导入字体和颜色、文件夹位置等内容。
  • 它确实有助于检查抛出的列。 (我确实有通知,但也没有看到您的回复)。为了便于阅读,我将在不同的评论中发布我重置设置的经验。
  • 重置设置没有区别。
【解决方案2】:

我不确定我是否理解这是怎么发生的,但我有一个非常相似的问题。帮手似乎也没有出现在我面前。最大的不同是它只是回到我的表单,没有崩溃,没有 windows 异常,没有完成 sub,就像我在那个时候调用了 exit sub 之类的。

就像这样:我正在单步执行代码并且遇到了一些错误的代码,我点击 step into/over 以执行突出显示的代码,然后突然我的表单再次显示,然后我可以与表单并继续,好像什么都没发生一样......当我似乎在代码中看不到任何错误并且我需要异常告诉我出了什么问题(格式错误的字符串?不正确的类型?)时,尤其令人讨厌。

在 Windows 7 x64 上运行 VS 2010 Premium...据我所知,我已将调试器设置为默认设置(用于已调试的 Windows 窗体应用程序)。使用 VB.Net,没有数据连接(除非您计算 XML 文件 - 但这似乎不会导致它......)代码没有什么特别之处,我认为简单的堆栈溢出 [...] 会导致它即将发生。有人有同样的经历吗?

::编辑::
顺便说一句,当它不是一个明显的错误时,我在“有异常”的位置周围放置了一个 try catch 块来捕获实际异常,然后查看代码中捕获的异常 - 烦人,但它有效!
::再次编辑::
好吧,我似乎已经找到了如何获得异常帮助器 - 我认为这里有人提到他们已经用尽了这个选项,但它解决了我的问题:[Debug -> Exceptions -> “Break when an exception is:” -> Common语言运行时异常:抛出] 应该被检查 - 似乎没有意义为什么它会继续运行......哦,好吧
::结束编辑::

【讨论】:

  • 欢迎来到 StackOverflow。这不是对原始问题的答案,实际上是一个单独的问题本身。您真的应该将单独的问题作为您自己的问题发布,并链接到相关问题以供参考。欲了解更多信息,请阅读常见问题解答:stackoverflow.com/faq 另外,我遇​​到了与您完全相同的问题,并且已经在这里发布了一个问题:stackoverflow.com/questions/4552416/… 如果您有什么要补充的问题,我建议您将其发布为而是在那里发表评论。
【解决方案3】:

我得到了类似的东西(相同的行为),但我认为This Microsoft Help Page 也描述了我的情况:“Windows 窗体事件中未处理的异常不会向上传播调用堆栈”

【讨论】:

  • 我们正在逐步将项目转移到VS2010,所以问题已经不是很紧急了。不过还是谢谢。
【解决方案4】:

我遇到了 Jan Willem 的确切情况,ADODB.Connection.Open 将我踢出 Visual Studio 中的程序,而不是进入调试助手。问题是请求的提供程序使用的是 32 位 dll,而我正在为 64 位进行编译。将项目更改为 32 位会使异常在 Visual Studio 中可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2020-03-02
    • 2013-05-31
    • 2020-01-01
    • 2018-06-01
    相关资源
    最近更新 更多