我有一个使用4个线程运行相同代码的应用程序。但是,在调试时,当我进行单步调试时,它会在不同的线程之间跳转。如何将其锁定到一个线程,以便其他线程在调试时被忽略?
我有一个使用4个线程运行相同代码的应用程序。但是,在调试时,当我进行单步调试时,它会在不同的线程之间跳转。如何将其锁定到一个线程,以便其他线程在调试时被忽略?
可以。
在线程窗口(Debug -> Windows -> Threads)中,右键单击想要的线程,选择“切换到线程”。
你也可以选择“冻结”不想调试的线程以防止它们运行。但是请不要忘记“解冻”它们,否则它们将无法工作。
更多阅读。
单步跟踪单个线程在VS 2012中似乎大多已经修复(但仍有一些限制,可以在下面的链接中看到)。断点很麻烦。
冻结和解冻线程是通常的解决方法,正如之前的答案所述,但这很繁琐,当您的线程等待另一个被冻结的线程时,它可能会导致挂起。这些可能很难从中恢复,而不会失去对您感兴趣的线程中的位置。
另一个有用的工作流程是在断点上应用线程过滤器,也在一些答案中提到:
创建断点,右键单击断点,单击“过滤器”,并输入ThreadId = 7740(来自线程窗口的线程ID)。
这可能非常繁琐。
我向微软建议修复单步执行(及其变体),以便永远不切换线程,除非在其他线程中命中显式断点。他们还应该添加一个快捷方式(例如Ctrl-F9)来创建当前线程ID作为其过滤器的断点。这将使第二个工作流程更加方便。
如果您同意此建议将非常有用,请投票赞成,或添加您自己的建议:
您还可以在代码中设置条件断点,并将 thread.Id == [someValue]
或 Thread.Name == "[Somename]"
放入断点条件中...