VS2012 - 为什么我的主UI线程显示绿色调试语句?

Sim*_*ver 11 visual-studio-2012

编辑:如果你看到同样的问题(并且你习惯于在VS2010下没有看到这个)请在下面评论,所以我知道这不仅仅是我 - 但一定要检查韩的答案,以确保没有出现这些情况. ..


我一直在更新我的应用程序,以便在VS2012 RTM中使用.NET 4.5运行,并注意到我不太了解的内容,这是意外的绿色突出显示的语句(而不是黄色).

在此输入图像描述

现在我很清楚这应该是什么意思,IDE甚至向我展示了一些解释工具提示.

这是当该线程从当前函数返回时执行的下一个语句

但是,对于这段代码,绝对没有任何异步或线程.在这个简单的例子中,我相信你会同意string.ToUpper()不会在另一个线程中关闭.我可以逐步完成代码.

没有其他事情发生,我在主线程上,你可以在这里看到.

小号

正在使用asyncawaitMVVM-Light(上面的方法是RelayCommand的结果),但我仍然获得这种行为,即使代码路径是直接关闭的事件处理程序等 PreviewKeyDown.

在此输入图像描述

如果我创建一个新的应用程序,我不能复制它 - 颜色是预期的黄色 - 即使使用await.

有人知道吗?它开始让我发疯!

Han*_*ant 5

当前指令指针不完全位于语句的开头时为绿色.一些常见原因:

  • 在线程代码中很常见,在一个线程中设置断点并将上下文切换到另一个线程.另一个线程将被调试器在完全随机的位置中断.通常在您没有源代码或调试信息的代码中,如String.ToUpper(),调试器只能显示"最接近"的源代码
  • 使用Debugger + Break All进入调试器.与上述相同,指令指针将位于随机地址
  • 在没有调试信息的代码中获取异常.编辑器显示调用堆栈中的最后一个条目,它确实有源代码.您需要调用堆栈窗口以查看引发实际异常的位置.或者是例外助手,其存在的原因
  • 调试优化代码.抖动优化器会严重扰乱代码,使调试器无法准确显示当前位置
  • 在调试时过时的调试信息或编辑代码
  • 调试由x64抖动生成的代码,在项目的Target Platform设置为AnyCPU时发生.x64抖动有许多慢性错误没有得到修复,产生不正确的调试信息就是其中之一.直到完全重写之后才解决的问题,由RyuJIT项目完成,并在.NET 4.6版中首次提供.在EXE项目中定位x86是一种解决方法.