Osk*_*lin 121 c# multithreading visual-studio-2010
我有一个4个线程的应用程序使用相同的代码.但是,当我迈步时,它会在不同的线程之间跳转.如何将其锁定到一个线程,以便其他线程被忽略进行调试?
Ste*_*eve 16
在单个线程中单步执行似乎主要在VS 2012中修复(您可以在下面的链接中看到一些警告).断点很痛苦.
冻结和解冻线程是通常的解决方法,正如之前的答案所述,但它很繁琐,并且当你的线程等待另一个被冻结的线程时它会导致挂起.这些可能很难恢复,而不会失去你感兴趣的线程中的位置.
另一个有用的工作流程是在断点上应用线程过滤器,在一些答案中也有说明:
创建断点,右键单击断点,单击Filter,然后输入ThreadId = 7740(线程窗口中的线程ID).
这可能非常繁琐.
我对Microsoft的建议是将单步执行(及其变体)修改为永不切换线程,除非在另一个线程中遇到显式断点.他们还应该添加一个快捷方式(可能是Ctrl-F9)来创建一个断点,当前线程id作为其过滤器.这将使第二个工作流程更加方便.
如果您同意这个建议有用,请投票给您,或者添加您自己的建议:
对于简单的情况,存在更快的解决方法 - 请参阅史蒂夫链接中的评论。
调试器只会在发起该步骤的线程上完成该步骤。因此,如果您遇到断点,禁用它,然后开始单步执行,您不应该在不同的线程上停止。如果您的应用程序中有其他断点并且另一个线程命中了一个断点,那么您将在混合线程状态下进行调试,如下所述
因此,在我的情况下,一旦各个线程开始命中我的断点,我只需按“继续”几次,直到确定我正在寻找的调用 - 然后删除断点并单步执行代码的其余部分,同时保持在同一线程上,不受来自其他线程的干扰其余的人。
如果您想保留多个断点等,这显然会成为一个问题 - 但对于简单的情况来说,这更容易做到。