当我在 Visual Studio 中调试时,出于某种原因,在调试某个线程时,Visual Studio 会跳转到不同的线程。
如何更改行为以使其位于同一线程上?
当我在 Visual Studio 中调试时,出于某种原因,在调试某个线程时,Visual Studio 会跳转到不同的线程。
如何更改行为以使其位于同一线程上?
当您说“在调试某个线程时,Visual Studio 会随机跳到不同的线程”,您的意思是当您单步执行特定线程上的代码时,您可能会在另一个线程上遇到断点?
如果是这样,您可以使用“线程”窗口来“冻结”您对调试感兴趣的线程以外的线程:
来自http://msdn.microsoft.com/en-us/library/w15yf86f.aspx:
在“线程”窗口中,您可以设置活动线程。此外,您可以冻结或解冻每个单独线程的执行。冻结会阻止线程的执行。解冻使其能够继续。两个垂直的蓝色条表示冻结的线程。
对此的支持可能取决于您拥有的 Visual Studio 版本(例如,我认为 Express 版本不支持 Thread 窗口)。
这里的所有答案都在谈论冻结线程,但是当线程很多时会变得很麻烦,而且您不知道要冻结哪一个。我发现了一个更简单的技巧。
当一个断点被线程i命中时,说j,k等将在一段时间内命中相同,然后暂时禁用断点并开始调试线程i。我看到调试器不会跳到其他线程,因为对于这些线程,没有断点可以中断。完成调试后启用断点。
这是默认设置,因为我认为在调试器中运行程序不应该改变程序的结果。
当程序“实时”运行时,它会不断地在线程之间切换,所以如果调试器不这样做,程序的行为就会不同。
在任何情况下,我知道防止它的唯一方法是打开线程窗口,右键单击当前线程以外的所有其他线程,然后选择freeze
. (之后再提醒thaw
他们)
通常,我通过在线程面板中单击鼠标右键来冻结其他线程。我不知道这是否理智。