代码之家  ›  专栏  ›  技术社区  ›  Jan Willem B

Visual Studio不会中断异常助手,但只会停止进程。

  •  5
  • Jan Willem B  · 技术社区  · 15 年前

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

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

    异常选项(ctrl+alt+e)配置正确:“用户未处理”选中所有项目,“引发”未选中。在调试选项中,我启用了异常助手。

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

    编辑:

    看起来只有在WinForms应用程序中才会出现运行不正常的异常助手ghost,并且只有在发生了一些外部操作(如调用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 回复  |  直到 13 年前
        1
  •  0
  •   Greg    14 年前

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

        2
  •  2
  •   Andras Zoltan    15 年前

    我不完全确定是什么导致了这种行为——但我刚刚经历了同样的事情。

    此答案的简短版本:

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

    长版本:

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

    奇怪的是,在同一台机器上,我可以调试在iis7.5中运行的WCF服务——所以我无法理解。

    在多次咒骂和反复尝试之后,我禁用了Windows错误报告。不过,对话框出现了,VS不会在异常情况下中断。

    因此,我禁用了Windows错误报告服务(它是按需启动的)-这次应用程序只需退出而不显示对话框-但vs不会在异常情况下中断。

    最后,我发现VS的配置可能有问题,所以我重新应用了Visual Studio 2008 SP1,现在它又正常工作了。

        3
  •  1
  •   Code Jockey    14 年前

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

    它是这样的:我正在单步执行代码,我遇到了一些错误的代码,我点击单步执行/重复执行突出显示的代码,然后突然我的表单再次显示,然后我可以与表单交互并继续,就像什么都没有发生一样….当我在代码中看不到任何错误时尤其恼人,我需要异常来告诉我出了什么问题(错误的格式化字符串?不正确的类型?)

    正在Windows 7 x64上运行vs 2010高级版…据我所知,我已经将调试器设置作为默认设置(对于已调试的Windows窗体应用程序)。使用vb.net,没有数据连接(除非您计算一个XML文件-但这似乎不会导致它…)对于代码没有什么特别的地方,我认为简单的堆栈溢出[…]会导致它发生。有没有人有同样的经历?

    ::编辑:
    顺便说一句,当它不是一个明显的错误时,我在“有一个异常”的地方放了一个try-catch块来捕获实际的异常,然后在代码中查看捕获的异常-令人讨厌,但它是有效的!
    :再次编辑:
    嗯,我似乎已经找到了如何获取异常帮助器的方法-我认为这里有人提到过他们已经用尽了这个选项,但它解决了我的问题:[调试->异常->“异常时中断:”->公共语言运行时异常:引发]应该被选中-但似乎不理解为什么它会继续运行…哦好
    :结束编辑:

        4
  •  0
  •   Arne Joris    13 年前

    我遇到了和JanWillem一样的情况,使用adodb.connection.open将我从Visual Studio的程序中踢出,而不是进入调试助手。问题是请求的提供程序正在使用 32位动态链接库 我正在编译64位。将项目更改为32位使异常在Visual Studio中可见。