我希望能够在调试时只跟踪一个线程的执行。我使用线程池,因此调试器不断在线程之间切换,这使得调试非常不舒服。
读:
我得到一个解决方案,它是条件断点(基于线程的名称)。但是,我不能说“线程#3”总是处理有趣的情况,所以我必须改变每次执行的条件。太多的工作。
另一个解决方案是使用冻结/解冻功能只使我有趣的线程运行。但是,这会使某些信息无法使用,因为所有线程都已暂停。
我现在使用的是让程序运行直到我到达断点,我肯定会在好的线程中。然后我暂停线程池的所有其他线程并尝试恢复执行。如果程序似乎卡住了,我暂停,解冻当前的线程。
理想的解决方案是找到正确的线程,标记它然后对Visual Studio说:“仅在当前线程被标记为时才会中断”。
这甚至可能吗?
答案 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嵌入自定义类中。
仅供参考:您不能在条件断点中使用静态变量,因为它们不在上下文中。从来没有真正理解为什么静力学不总是在上下文中。