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