gpt4 book ai didi

visual-studio - VS2015 在 DebuggerStepTrough 中抛出捕获的异常?

转载 作者:行者123 更新时间:2023-12-04 03:34:51 30 4
gpt4 key购买 nike

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

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

其中一些可能发生并被处理的问题被放入带有 DebuggerStepTrough 的 Try-catch block 中:

例子:

[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 中没有这种行为。有没有办法避免它?

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

最佳答案

你是对的,你描述的行为是新的 performance improvement 的结果这是在 Visual Studio 2015 中引入的。新功能大大减少了处理在非用户模块中抛出和捕获的 clr 异常的调试开销(启用仅我的代码)。

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

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

  • 将您的应用程序定位为使用 .net 框架版本 < 4.0
  • 重构您的代码,使具有这些调试器属性的函数/类位于不同的模块中,并构建优化和/或没有符号的模块。

  • 好消息是 Visual Studio 调试器团队已经承认了这个问题,并将在 Visual Studio 2015 的下一次更新中提供解决方法。

    更新

    Visual Studio 2015 Update 2 中提供了此问题的解决方法,并在 Using the DebuggerNonUserCode Attribute in Visual Studio 2015 中进行了详细说明。博客文章。

    对于那些只想知道该怎么做的人。在命令提示符下运行以下命令:
    reg add HKCU\Software\Microsoft\VisualStudio\14.0_Config\Debugger\Engine /v AlwaysEnableExceptionCallbacksOutsideMyCode /t REG_DWORD /d 1

    关于visual-studio - VS2015 在 DebuggerStepTrough 中抛出捕获的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34082758/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com