在VS2010中,当所有线程都处于睡眠、等待或加入状态时,继续调试

本文关键字:等待 调试 继续 状态 VS2010 线程 于睡眠 | 更新日期: 2023-09-27 18:05:19

我有一个应用程序,那里有几个线程,大多数时候他们只是在等待一个事件发生(例如与AutoResetEvent.Wait)。

在这种情况下,如果我尝试使用即时窗口来执行命令,我得到"无法计算表达式,因为当前线程处于睡眠,等待或加入",无论我使用什么线程。我想知道是否有什么技巧可以用来让线程停止等待(比如以某种方式设置AutoResetEvent)。

我已经阅读了调试而暂停和'不能评估表达式'所以我担心这是不可能的。

在VS2010中,当所有线程都处于睡眠、等待或加入状态时,继续调试

我认为你唯一的选择

  • 预先注入一些在本机代码中永远不会停止的线程(某种忙碌等待)。你将有效地失去一个核心,但至少可以调试。
  • 有特殊的线程,将等待一些外部命令触发事件…
  • 放弃表达式/即时窗口,依赖内存转储或使用WinDbg与SoS。

基本上没有托管线程,没有卡在本机代码中,你不能安全地在调试过程中运行托管代码(自链接2010年问题以来,这一领域没有什么新内容)。