0

我有一个应用程序,其中有几个线程,并且大部分时间他们只是(用AutoResetEvent.Wait EG)等待一个事件的发生。继续在VS2010调试,而所有线程都在睡眠,等待或加入

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

我读过Debugging whilst paused and 'cannot evaluate expression'所以我担心这可能是不可能的。

+1

我相信(?)线程必须被打破(停止),然后才能使用即时窗口。 – 2013-03-22 04:10:15

+0

@JonathonReinhart:我可以在VS.Net点击暂停,但随后在那个时候所有的线程都已经处于“休眠,等待或加入”。 – user276648 2013-03-25 01:05:19

回答

2

我认为你唯一的选择

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

基本上没有托管的线程没有卡在本机代码中,你不能安全地在调试过程中运行托管代码(自2010年链接问题以来没有任何新的东西)。

+0

谢谢,这就是我所害怕的。实际上,我的应用程序总是在监听新的连接,所以我只是用Socket.Connect创建了一个小程序。但我想知道是否有其他方式,以防我没有这个线程。 – user276648 2013-03-25 01:07:59