是否有可能在Visual Studio中破坏单个线程,而其他线程将继续执行?
我有一个后台线程可以执行简单的数据发送/接收,我希望在其他线程中逐步执行代码时使用。
答案 0 :(得分:12)
打开线程视图(Debug-> Windows-> Threads),右键单击要挂起的线程,选择“Freeze”。选择“解冻”使其恢复运行状态。
答案 1 :(得分:7)
一般来说,这是不可能的,但有些事情可能适用于特定情况。
基本解决方案 正如其他地方所述,重复序列:冻结,恢复,(等待),暂停,解冻,步骤应该导致你描述的行为,让其他线程在你的目标线程中在后台运行的可能性停了。
这种方法至少有两个问题:
<强>改进强>
可以使用不同的过程解决第一个问题:在立即窗口中发出Thread.Sleep(10000)
,有效地保持聚焦线程占用而其他线程正常执行。您甚至可以将该命令绑定到宏。
第二个问题只能通过不需要暂停调试器的方法来解决。但是,当会话没有暂停时,我们如何检查状态?这就是IntelliTrace的用武之地,但您可能会发现需要创建custom IntelliTrace events。这种方法的缺点是你不能手动修改飞行中的状态。
答案 2 :(得分:1)
设置一个计数器,为每个创建的线程执行一个计数器,然后将断点设置为在条件上中断并为该计数器选择一个值。我认为这不会在所有情况下都有效,特别是PLINQ,但在很多情况下应该可行。
答案 3 :(得分:0)
答案 4 :(得分:0)
您始终可以根据当前线程的属性(如名称或ID)设置条件断点。
你也可以找到这个有用的:http://www.codeproject.com/Tips/396617/Conditional-Breakpoint-using-Make-Object-Id-featur
这在VS2008中对我有用,至少应该在2010年以类似的方式工作