【问题标题】:Continue debugging in VS2010 while all threads are in sleep, wait or join在所有线程处于睡眠、等待或加入时继续在 VS2010 中调试
【发布时间】:2013-03-22 04:02:46
【问题描述】:

我有一个应用程序,其中有多个线程,大部分时间它们只是在等待事件发生(例如使用 AutoResetEvent.Wait)。

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

我已经阅读了Debugging whilst paused and 'cannot evaluate expression',所以我担心这可能是不可能的。

【问题讨论】:

  • 我认为必须先中断(停止)一个 (?) 线程,然后才能使用即时窗口。
  • @JonathonReinhart:我可以在 VS.Net 中单击暂停,但那时所有线程都已经处于“睡眠、等待或加入”状态。

标签: c# multithreading visual-studio-2010 visual-studio-debugging


【解决方案1】:

我认为你唯一的选择

  • 提前注入一些在本机代码中永远不会停止的线程(某种忙等待)。您实际上会失去一个内核,但至少可以调试。
  • 有特殊的线程会等待一些外部命令触发事件...
  • 放弃表达式/立即窗口并依赖内存转储或使用带有 SoS 的 WinDbg。

基本上,如果没有未卡在本机代码中的托管线程,您就无法在调试进程中安全地运行托管代码(自 2010 年链接问题以来,该领域没有新内容)。

【讨论】:

  • 谢谢,这正是我所担心的。实际上,我的应用程序总是在监听新的连接,所以我刚刚创建了一个带有 Socket.Connect 的小程序。但我想知道是否有其他方法,以防我没有那个线程。
猜你喜欢
  • 2013-10-19
  • 2013-05-28
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
相关资源
最近更新 更多