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

rid*_*00z 33 debugging multithreading visual-studio visual-studio-debugging

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

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

Mic*_*urr 24

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

如果是这样,您可以使用"线程"窗口"冻结"除您要调试的线程之外的线程:

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

在"线程"窗口中,您可以设置活动线程.此外,您可以冻结或解冻每个单独线程的执行.冻结可以防止执行线程.解冻使它能够继续下去.两个垂直的蓝色条标识冻结的线程.

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

  • 在调试时,当我遇到断点时,我会进入线程窗口,冻结所有线程,并且仅解冻当前线程。像这样,我只能继续调试我正在处理的线程。 (2认同)

jal*_*alf 6

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

当程序运行"实时"时,它会在线程之间不断切换,因此如果调试器没有这样做,程序的行为会有所不同.

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

  • 这是有道理的......但并不能改变它非常烦人的事实。:) 如果 MS 添加了一个配置选项来在断点被击中时保留在当前线程中,这将对调试很有帮助...这样,可以调试当时正在执行的逻辑,而无需繁琐的操作和关联调试具有冻结线程的程序时出现滞后。 (2认同)

leg*_*s2k 5

这里所有的答案都涉及冻结线程,但是当线程很多时,它将变得很麻烦,而且您不知道要冻结哪个线程。我发现了一个简单的把戏。

当某个线程i击中一个断点,并且说jk等将在某个时间内击中该断点时,请暂时禁用该断点并开始调试线程i。我看到调试器不会跳转到其他线程,因为对于那些线程来说,没有断点可以插入。完成调试后,启用断点。

  • 问题是,如果您正在调试一个线程将数据传递给另一个线程的某些内容...... (2认同)

spe*_*der 4

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