在调试时如何让Visual Studio保持在一个线程上?

时间:2009-07-01 00:30:06

标签: multithreading visual-studio debugging visual-studio-debugging

当我在Visual Studio中进行调试时,出于某种原因调试某个线程时,Visual Studio会跳转到不同的线程。

如何更改行为以使其位于同一个线程上?

4 个答案:

答案 0 :(得分:24)

当你说“调试某个线程时,visual studio会随机跳转到不同的线程”,你的意思是当你在特定线程上单步执行代码时,你可能会遇到另一个线程上的断点吗? / p>

如果是这样,你可以使用Thread窗口“冻结”你想要调试的线程以外的线程:

来自http://msdn.microsoft.com/en-us/library/w15yf86f.aspx

  

在“线程”窗口中,您可以进行设置   活动线程。另外,你   可以冻结或解冻执行   每个单独的线程。冷冻   防止执行线程。   解冻使它能够继续下去。二   垂直的蓝色条标识一个冷冻   线程。

对此的支持可能取决于您拥有的Visual Studio版本(例如,我认为Express版本不支持Thread窗口)。

答案 1 :(得分:6)

这是默认设置,因为我认为在调试器中运行程序不应该改变程序的结果。

当程序运行“live”时,它会不断在线程之间切换,所以如果调试器没有这样做,那么程序的行为会有所不同。

在任何情况下,我知道防止它的唯一方法是打开“线程”窗口,右键单击除当前线程之外的所有其他线程,然后选择freeze。 (记得之后再次thaw

答案 2 :(得分:5)

这里的所有答案都谈论冻结线程,但是当它们很多时它会变得很麻烦,而你却不知道要冻结哪一个。我找到了一个更容易的技巧。

如果线程 i 命中断点,并且说 j k 等,则会在某些线程中出现相同的情况时间,然后暂时禁用断点并开始调试线程 i 。我看到调试器没有跳转到其他线程,因为对于那些线程,没有断点可以进入。完成调试后启用断点。

答案 3 :(得分:3)

通常,我通过在线程面板中单击鼠标右键来冻结其他线程。我不知道这是否合理。