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

时间:2012-09-13 22:14:37

标签: visual-studio-2012

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


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

enter image description here

现在我很清楚这是所谓的意味着什么,IDE甚至向我展示了一些解释工具提示。

  

这是此线程返回时要执行的下一个语句   当前的功能

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

没有别的事情发生了,我在主线程上,你可以在这里看到。

s

上午使用asyncawait以及MVVM-Light(上述方法是RelayCommand的结果)但即使是代码路径直接关闭事件处理程序,例如PreviewKeyDown

enter image description here

如果我创建了一个新的应用程序,我无法复制它 - 即使使用await,颜色也会按预期变为黄色。

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

3 个答案:

答案 0 :(得分:5)

当语句开头的当前指令指针 时,它为绿色。一些常见原因:

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

答案 1 :(得分:0)

实际上,我也面临这个问题。这是因为我在横向模式下错过了一些布局组件,因此请检查所有Id和组件以及Run,您将不会收到此错误。

答案 2 :(得分:0)

我了解这是旧帖子,但我想以我的经验回答这个问题。 我最近在一个WCF应用程序中遇到了相同的问题。调试并仔细查看服务日志后,我发现我的代码给出了此错误,因为服务达到了代码执行的最大允许限制,并且一旦服务达到最大允许的时间限制,便试图卸载当前调试会话。

绿色语句错误 :这是线程返回时要执行的下一条语句

因此,为避免此问题,您可以尝试查找任何可能的代码(代码/服务超时或任何其他代码块),这些代码试图卸载当前正在执行的代码上下文并尝试对其进行修复,此外,@ Hans给出的原始解释是对于解决此问题仍然非常重要。