如何在Visual Studio中仅调试一个线程

时间:2011-11-18 14:00:18

标签: .net multithreading visual-studio-2010 debugging

我希望能够在调试时只跟踪一个线程的执行。我使用线程池,因此调试器不断在线程之间切换,这使得调试非常不舒服。

读:

我得到一个解决方案,它是条件断点(基于线程的名称)。但是,我不能说“线程#3”总是处理有趣的情况,所以我必须改变每次执行的条件。太多的工作。

另一个解决方案是使用冻结/解冻功能只使我有趣的线程运行。但是,这会使某些信息无法使用,因为所有线程都已暂停。

我现在使用的是让程序运行直到我到达断点,我肯定会在好的线程中。然后我暂停线程池的所有其他线程并尝试恢复执行。如果程序似乎卡住了,我暂停,解冻当前的线程。

理想的解决方案是找到正确的线程,标记它然后对Visual Studio说:“仅在当前线程被标记为时才会中断”。

这甚至可能吗?

3 个答案:

答案 0 :(得分:7)

调试时,您可以冻结 主题窗口中的所有主题,仅恢复您感兴趣的主题。

答案 1 :(得分:2)

我会使用您提到的条件断点,而不是将某些固定字符串与某些半全局变量(可能是主类上的静态属性?)进行比较。

当您确定哪个线程变得有趣时,您可以使用立即窗口设置变量名称并允许命中条件断点。

答案 2 :(得分:2)

有点晚了,但这是搜索中的第一个答案。

我在VS 2015中使用以下内容......

var thread = System.Threading.Thread.CurrentThread;
if (thread.Name == null)
            thread.Name = "Main";

然后在断点......

System.Threading.Thread.CurrentThread.Name == "Main"

为了使其更加灵活,您可以将Thread嵌入自定义类中。

仅供参考:您不能在条件断点中使用静态变量,因为它们不在上下文中。从来没有真正理解为什么静力学不总是在上下文中。