13

编辑:如果您遇到同样的问题(并且您习惯于在 VS2010 下看不到此问题),请在下面发表评论,以便我知道这不仅仅是我 - 但请务必检查 Han 的回答以确保这些情况都不会出现。 ..


我一直在更新我的应用程序以在 VS2012 RTM 中使用 .NET 4.5 运行,并注意到一些我不太理解的东西,即意外地以绿色突出显示的语句(而不是黄色)。

在此处输入图像描述

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

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

但是,绝对没有关于此代码的异步或线程。在这个简单的例子中,我相信你会同意它string.ToUpper()不会在另一个线程中关闭。我可以单步执行代码没有问题。

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

s

正在使用asyncand awaitMVVM-Light上述方法是 RelayCommand 的结果),但即使代码路径直接关闭事件处理程序(例如 PreviewKeyDown.

在此处输入图像描述

如果我创建一个新应用程序,我无法复制它——颜色如预期的那样是黄色的——即使使用await.

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

4

3 回答 3

5

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

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

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

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

因此,为了避免这个问题,您可以尝试查看任何潜在的代码(代码/服务超时或任何其他代码块),它们试图卸载您当前正在执行的代码上下文并尝试修复它,此外@Hans 给出的原始解释仍然非常多与解决此问题相关。

于 2020-07-15T17:52:25.187 回答
0

其实我也面临这个问题。这是因为我在横向模式下错过了一些布局组件,所以检查所有 Id 和组件并运行,你不会得到这个错误。

于 2016-01-11T10:58:01.417 回答