Visual Studio不会破坏异常助手,但只是停止进程

时间:2009-09-10 16:21:13

标签: visual-studio visual-studio-2008

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

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

正确配置了例外选项(Ctrl + Alt + E):在所有项目上选中“user-unhandled”,取消选中“thrown”。在调试选项中,我启用了异常助手。

因为它只发生在某些场合,我试图找出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语句之后,异常助手将永远不会启动。

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

4 个答案:

答案 0 :(得分:2)

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

此答案的简短版本:

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

长版:

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

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

经过多次咒骂和重复尝试后,我禁用了Windows错误报告。仍然会出现对话框,VS不会在例外情况下中断。

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

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

答案 1 :(得分:1)

我不确定我是否理解这是怎么回事,但我有一个非常类似的问题。帮助者似乎也没有出现在我身上。不同的是,它只是回到我的形式,没有崩溃,没有窗口异常,没有完成子,就像我在那一点或其他地方调用了一个退出子。

就是这样:我正在逐步执行代码并且我遇到了一些不好的代码,我点击进入/结束执行突出显示的代码,然后突然我的表单再次显示,然后我可以与之交互表单并继续,好像什么也没发生....特别烦人的时候,我似乎无法在代码中看到任何错误,我需要异常来告诉我出了什么问题(格式错误的字符串?不正确的类型?)

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

::编辑::
顺便说一下,当它不是一个明显的错误时,我在一个“有异常”的地方放置一个try catch块来捕获实际的异常,然后在代码中查看捕获的异常 - 烦人,但它有效! ::再次编辑::
好吧,我似乎已经找到了如何获得异常助手 - 我想这里有人提到他们已经用尽了这个选项,但它解决了我的问题:[Debug - >例外 - > “当例外情况发生时中断:” - >应该检查公共语言运行时异常:抛出] - 似乎没有意义为什么它会继续运行...哦,哦 ::结束编辑::

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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