Visual Studio,debugging多个线程之一

我有一个应用程序与4个线程工作相同的代码。 但是,当我步它跳跃在不同的线程之间。 如何将其locking到一个线程,以便其他线程在debugging时被忽略?

是。

在Threads窗口(Debug – > Windows – > Threads)中,右键单击你想要的线程并select“切换到线程”。

您也可以在不想debugging的线程上select“冻结”,以防止它们运行。 但是,如果你期望他们能够工作,不要忘记“解冻”他们。

进一步阅读 。

通过一个单线程的单步似乎大多是修复在VS 2012(有一些注意事项,你可以看到我的链接下面)。 断点是一个痛苦。

正如前面的答案所述,冻结和解冻线程是通常的解决方法,但是它很乏味,而且当线程在另一个被冻结的线程上等待时,会导致挂起。 这些可能很难从你感兴趣的话题中失去你的位置而恢复。

另一个有用的工作stream程是在断点上应用一个线程filter,也在一些答案中说明:

创build一个断点,右键单击断点,单击filter,然后inputThreadId = 7740(线程窗口中的线程ID)。

这可能是非常乏味的。

我对微软的build议是修复单步执行(及其变体),以便永远不会切换线程,除非在另一个线程中显式断点。 他们还应该添加一个快捷方式(可能是Ctrl-F9)来创build一个以当前线程ID作为filter的断点。 这将使第二个工作stream程更加方便。

如果您同意这将是有用的投票build议,或添加自己的build议:

https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/8543248-make-the-debugger-stick-to-the-current-thread-inst

你也可以在你的代码中放置一个条件断点,并在断点条件中放置thread.Id == [someValue]Thread.Name == "[Somename]"

这在Visual Studio 2008 SP1中非常类似于一个非常类似的问题。 它是用SP后修补程序修复的。 但是还有其他的证据表明这个修补程序并没有被纳入到代码库中,这个反馈项目也是一个问题。 修补程序没有被整合回来并不是那么不寻常。

没有一个反馈项目完全描述你的问题,至less我可以find。 我build议你申请一个。 考虑到像这样重现错误通常的麻烦,我强烈build议你包括一个展示这个问题的再现项目,指导如何重现这个问题。

针对您的问题有一个解决方法,您可以进入Debug + Windows +线程,右键单击您不想debugging的线程并selectFreeze。 不要忘了以后解冻他们。

这些错误再次在Visual Studio 2010 Service Pack 1中修复。

对于简单的案例存在更快的解决方法 – 请参阅史蒂夫链接中的评论。

debugging器将只完成该步骤所源自的线程的一个步骤。 所以,如果你点击一个断点,禁用它,然后开始步进,不要停在另一个线程上。 如果您的应用程序中有其他断点,而另一个线程遇到了其他断点,那么您将按照所述的方式在混合线程状态下进行debugging

所以在我的情况下,一旦各种线程开始打我的断点,我只是打继续了几次,直到我确定了我正在寻找的电话 – 然后删除断点,并通过其余的代码,而保持在同一线程没有干扰其余的人。

如果你想保留多个断点,这显然会成为一个问题 – 但是对于简单的情况来说,这样做要容易得多。