【问题标题】:Weird behaviour in VS 2013 during debugging调试期间 VS 2013 中的奇怪行为
【发布时间】:2014-05-14 18:07:45
【问题描述】:

在 Visual Studion 2013 中调试期间,对于 C# 项目,行号旁边显示的黄色箭头不会移动到下一行。 我必须在每一行按两次 F10。 当有一个方法调用并且我按 F11 时,它会转到该方法,然后在按 F10 时跳回调用部分,我必须再次按 F10,然后它才会返回到被调用方法的下一行.

发生了什么事? 我是否不小心打开/关闭了 VS 中的某些设置?

请帮忙,因为这会造成很多挫败感。

问候。

【问题讨论】:

  • 您在调试多线程应用程序吗?检查您的Threads 窗口,您可能有多个线程调用同一个方法,这就是为什么您在同一个方法上会有“按两次”的感觉。
  • 当您的程序在多个线程上运行时会发生这种情况。您运行两个线程的执行,如果线程运行代码的不同部分,有时您只需要从一个地方到另一个地方。

标签: c# .net debugging


【解决方案1】:

就像我在 cmets 中所说的那样,您似乎正在调试一个多线程应用程序,该应用程序多次访问同一个方法。

检查您的Threads 窗口,您会看到超过 1 个线程正在访问被调用的方法,这就是为什么您不得不多次按 F10 以及为什么 F11 会返回到被调用的方法。

Threads 窗口中,您可以通过右键单击线程并按“冻结”来冻结线程。

【讨论】:

  • 我是否选择每个线程并选择“冻结”?调试时需要做很多工作,因为我看到有很多线程在运行。
  • 您只能冻结那些调用您的特定方法的Threads。如果打开的线程太多,我会开始寻找原因,而不是仅仅将它们冻结在调试器中。
【解决方案2】:

正如 Yuval 的回答所建议的那样,这个问题似乎是由于多个线程而发生的。
幸运的是,测试它非常简单。你所要做的就是:

对于每个线程,在创建时为其分配一个唯一名称。这可以在创建后通过以下方式完成:

if(String.IsNullOrWhiteSpace(Thread.CurrentThread.Name))
{
   Thread.CurrentThread.Name = "MyThread_" + id++;
}

别忘了补充:

using System.Threading

在您的Watch 窗口中添加System.Threading.Thread.CurrentThread.Name 的记录。
现在剩下的就是检查每次按下F10时该记录的值是否发生变化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多