代码之家  ›  专栏  ›  技术社区  ›  Oskar Kjellin

Visual Studio,调试多个线程之一

  •  112
  • Oskar Kjellin  · 技术社区  · 15 年前

    我有一个应用程序有4个线程在处理相同的代码。然而,当我跨步时,它会在不同的线程之间跳跃。如何将其锁定到一个线程,以便忽略其他线程进行调试?

    6 回复  |  直到 15 年前
        1
  •  107
  •   i_am_jorf    15 年前

    对。

    在“线程”窗口(调试->窗口->线程)中,右键单击所需的线程并选择“切换到线程”。

    Further reading

        2
  •  16
  •   Steve    11 年前

    单步通过一个线程似乎在VS2012中基本上是固定的(有一些注意事项你可以在下面的链接中看到)。断点是一种痛苦。

    创建一个断点,右键单击断点,单击Filter,然后输入thread id=7740(线程窗口中的线程id)。

    如果你同意这是有用的,请投票表决该建议,或者添加你自己的建议:

    https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/8543248-make-the-debugger-stick-to-the-current-thread-inst

        3
  •  10
  •   xlecoustillier Andrey    13 年前

    thread.Id == [someValue] Thread.Name == "[Somename]"

        4
  •  3
  •   Boris    9 年前

    对于简单的案例,有一个更快的解决方法-请参阅史蒂夫链接中的评论。

    因此,在我的例子中,一旦不同的线程开始命中我的断点,我只需点击继续几次,直到我确定了我正在寻找的调用-然后删除断点并遍历其余代码,同时保持在同一个线程上,而不受其他线程的干扰。

        5
  •  2
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    feedback item 也是个问题。热修复程序没有集成回来并不是什么稀奇的事。

    对于您的问题有一种解决方法,您可以进入Debug+Windows+Threads,右键单击不想调试的线程并选择Freeze。以后别忘了解冻。

    这些错误在Visual Studio 2010服务包1中再次得到修复。

        6
  •  1
  •   BlueMax    7 年前

    我使用的是visualstudioprofessional2017,我使用Threads窗口选择性地冻结和解冻线程。通常我有多个相同代码的线程,我只想冻结它们,而不是其他线程。实际上,我喜欢MS Threads窗口,因为我可以选择要冻结的线程子集。我按名称对线程进行分组,然后可以冻结运行相同代码的所有线程,同时让其余线程运行。我试过使用Erwin-Mayer扩展,它运行得很好,但它冻结了除我正在运行的线程之外的所有线程,有时我会遇到调试没有达到我认为应该达到的断点的情况,然后因为所有其他线程都停止了,应用程序似乎也停止了。点击暂停按钮,然后在线程窗口中解冻线程可以解决这个问题。

        7
  •  0
  •   rebornx    6 年前

    当您点击 第一个断点,迈出一步,然后突然你被 另一条线上的黄色箭头?出人意料的行为来自 每当遇到断点时,调试器将停止。这意味着 在上的步骤完成之前,正在运行的线程遇到此断点 你现在的线索。下次遇到这种情况时,请尝试以下操作:

    1. 禁用或删除调试器切换到的新线程命中的断点。
    2. 继续(F5)
    3. 由于断点已被删除或禁用,因此可以继续单步执行该线程而不中断。

    7 lesser known hacks for debugging in Visual Studio