从BeginInvoke(...)调用的调试方法 - 锁定调试器

时间:2011-03-30 06:08:39

标签: c# visual-studio debugging

我正在使用BeginInvoke来启动委托,但问题是我无法调试 通过BeginInvoke调用的方法。在内部设置断点时 该方法,IDE暂停(通常),然后一旦断点被​​击中 尝试继续(F10或F11),调试器挂起。

2 个答案:

答案 0 :(得分:3)

挂起的最可能原因是隐式属性或.ToString评估,它会导致CLR和调试器出现死锁。尝试禁用此功能并重复方案

  • 工具 - >选项 - >调试器
  • 取消选中“启用隐式属性评估”

当调试器隐式或显式地计算函数时,它会在CLR中的一个被劫持的线程上执行此操作。此线程不是您当前正在调试的线程,并且在此操作期间所有其他线程都将被挂起。因此,如果任何ToString或属性方法执行线程敏感操作,则很容易导致死锁。

调试器从UI线程同步有效地执行调试器窗口中的方法,因此它也锁定了Visual Studio。

答案 1 :(得分:0)

我发现JaredPar的解决方案很有用,但有一个不同的场景,它很有用。我们在VS2005中发现.Net 3.5调试器没有挂起,它只是不会在委托方法内停止。实际上,证据表明委托方法从未被调用过。一旦我们取消了启用隐式属性评估,就可以调试方法,并且方法成功完成。