打破单线程

Eug*_*hov 21 c# debugging visual-studio-2010 visual-studio

是否有可能在Visual Studio中破坏单个线程,而其他线程将继续执行?

我有一个后台线程执行简单的数据发送/接收,我希望在其他线程中逐步执行我的代码.

sti*_*ijn 12

打开线程视图(Debug-> Windows-> Threads),右键单击要挂起的线程,选择"Freeze".选择"解冻"将其重新置于运行状态.

  • 程序运行时,线程窗口处于非活动状态.并且'解冻'并没有真正使它进入运行状态,它只是意味着在我从断点发布一个程序之后这个线程将运行(以及其他).我想要做的是逐步完成一个线程,而其他线程则在后台运行. (3认同)

Jos*_*aum 7

一般情况下这是不可能的,但有一些事情可能适用于特定的场景.

基本解决方案 如其他地方所述,重复序列:冻结,恢复,(等待),暂停,解冻,步骤 应该导致您描述的行为,让其他线程在目标线程暂停时在后台运行.

这种方法至少有两个问题:

  • 这很乏味
  • 您的后台线程将在调试器暂停时暂停.

改进

可以使用不同的过程解决第一个问题:Thread.Sleep(10000)在立即窗口中发出a ,有效地保持聚焦线程占用而其他线程正常执行.您甚至可以将该命令绑定到宏.

第二个问题只能通过不需要暂停调试器的方法来解决.但是,当会话没有暂停时,我们如何检查状态?这就是IntelliTrace的用武之地,但您可能会发现需要创建自定义IntelliTrace事件.这种方法的缺点是你不能手动修改飞行中的状态.