Visual studio VS2015抛出DebuggerStepTour中捕获的异常?

Visual studio VS2015抛出DebuggerStepTour中捕获的异常?,visual-studio,debugging,visual-studio-2015,Visual Studio,Debugging,Visual Studio 2015,我刚刚升级了VS2013,同样的代码在调试模式下有不同的行为 在VS2013中,我遇到了调试中断异常 其中一些可能发生并被处理的事件被放入带有DebuggerStepTour的Try-catch块中: 例如: [DebuggerStepThrough] private void DoSomething(){ try{ throw new InvalidOperationException();//Obviously in my case, it's not a throw

我刚刚升级了VS2013,同样的代码在调试模式下有不同的行为

在VS2013中,我遇到了调试中断异常

其中一些可能发生并被处理的事件被放入带有DebuggerStepTour的Try-catch块中:

例如:

[DebuggerStepThrough]
private void DoSomething(){
    try{
        throw new InvalidOperationException();//Obviously in my case, it's not a throw exception here but a method
    }catch(InvalidOperationException){
        //log something & handling this case
    }
}


private void SomeEntryPoint(){
    DoSomething();//In VS2015 I got the debug breaking here. In VS2013 I don't
}
我在VS2013中没有这种行为。有办法避免吗


(我已经启用了“仅我的代码”)

您是正确的,您描述的行为是Visual Studio 2015中引入的一种新行为的结果。新功能大大减少了处理非用户模块中抛出和捕获的clr异常(仅启用“我的代码”)的调试开销

不幸的是,在疏忽中,在具有[DebuggerHidden]、[DebuggerNonUserCode]和/或[DebuggerStepThrough]属性的函数中引发和捕获的异常不再被视为在非用户代码中引发和捕获的异常-调试器基本上忽略了Visual Studio 2015中与异常相关的那些属性(步骤筛选和调用堆栈筛选的工作原理与Visual Studio 2013中的相同)

坏消息是,对于这种情况,没有很好的方法恢复以前版本的行为。有两种可能的选择:

  • 将应用程序定位为使用.net framework版本<4.0
  • 重构代码,使具有这些调试器属性的函数/类位于不同的模块中,并构建优化和/或无符号的模块
  • 好消息是,Visual Studio调试器团队已经承认了这个问题,并将在Visual Studio 2015的下一次更新中提供解决方案

    更新

    有关此问题的解决方法,请参阅Visual Studio 2015 Update 2,并在博客文章中详细介绍

    对于那些只想知道该做什么的人。在命令提示符下运行以下命令:

    reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1
    

    在VS 2015中,代码运行时没有任何异常中断。您的异常设置是什么样子的?
    DEBUG>Exceptions…
    Ctrl+Alt+E
    )@test
    DEBUG>Exceptions
    在VS2015上不再存在。在
    异常设置
    窗口中,我有默认复选框(我在异常设置窗口上恢复了默认值)。该死的…我们必须重新安装VS2013,同时,我们有太多的异常(比如当尝试连接到一些无法访问的设备时出现TimeoutException)这会阻止我们进行任何调试…我们知道下一次更新何时会到来吗?您是否有任何链接表明他们将恢复此行为?您必须重新安装VS 2013,这真是太糟糕了。我很抱歉地说,没有迹象表明下一次更新将于何时进行,也没有公开宣布此问题我将被修复。当解决方案公开时,我将尝试更新此答案。无论如何,至少它会给我的管理层带来一些答案,而且你是最接近我的答案的人。但是你从哪里发现visual studio调试器团队已经承认了这个问题?@J4N你可以禁用spe的首次机会异常处理cific异常类型(例如TimeoutException)从而使调试成为可能。只要在异常窗口弹出时取消勾选“中断此异常”。@J4N我知道,我和你一样痛苦,我们的所有DebuggerStepThrough属性也都没有用。我只是想这可能会有所帮助。