当我在Visual Studio中进行调试时,出于某种原因调试某个线程时,Visual Studio会跳转到不同的线程。
如何更改行为以使其位于同一个线程上?
答案 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)
通常,我通过在线程面板中单击鼠标右键来冻结其他线程。我不知道这是否合理。