38

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

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

4

4 回答 4

27

当您说“在调试某个线程时,Visual Studio 会随机跳到不同的线程”,您的意思是当您单步执行特定线程上的代码时,您可能会在另一个线程上遇到断点?

如果是这样,您可以使用“线程”窗口来“冻结”您对调试感兴趣的线程以外的线程:

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

在“线程”窗口中,您可以设置活动线程。此外,您可以冻结或解冻每个单独线程的执行。冻结会阻止线程的执行。解冻使其能够继续。两个垂直的蓝色条表示冻结的线程。

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

于 2009-07-01T00:41:18.093 回答
8

这里的所有答案都在谈论冻结线程,但是当线程很多时会变得很麻烦,而且您不知道要冻结哪一个。我发现了一个更简单的技巧。

当一个断点被线程i命中时,说jk等将在一段时间内命中相同,然后暂时禁用断点并开始调试线程i。我看到调试器不会跳到其他线程,因为对于这些线程,没有断点可以中断。完成调试后启用断点。

于 2014-01-21T09:49:48.117 回答
7

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

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

在任何情况下,我知道防止它的唯一方法是打开线程窗口,右键单击当前线程以外的所有其他线程,然后选择freeze. (之后再提醒thaw他们)

于 2009-07-01T00:37:54.187 回答
3

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

于 2009-07-01T00:36:30.833 回答