【发布时间】:2016-05-12 08:19:05
【问题描述】:
不久前我重构了我的应用程序,从那时起我一直在使用 Visual Studio 2010 进行调试时遇到问题。
我的应用程序在不调试时按预期工作(不单步执行应用程序。附加的调试器不会导致任何问题)。但是,当触发断点并开始单步执行应用程序时,Visual Studio 和应用程序都会在最多 3-4 步后挂起。
更要强调这一点:它适用于我的客户,无论我是从 Visual Studio 还是独立启动它 - 只要没有触发断点。
我在代码中放置断点的位置并不重要。
IDE:Visual Studio 2010 x64
平台:.NET 4.0
重构包括对BeginInvoke 的大量跨线程调用 - 全部通过以下方法引导:
public static void BeginInvokeIfRequired(this Control control, Action action)
{
if (control.InvokeRequired)
{
control.BeginInvoke(action);
}
else
{
action.Invoke();
}
}
项目中没有一次调用Control.Invoke()。
- 上面的方法有问题吗?
此外,如果您能提供任何有关如何追踪此错误的提示,我将不胜感激。我目前的方法是向控制台添加输出并有选择地停用部分代码。
【问题讨论】:
-
嘿,亚斯! :) 几乎可以肯定这个问题与多线程相关......您是否有任何可能导致循环死锁的线程等待/锁定内容?
-
@DarylTeo 在代码部分没有锁。唯一的 lock 语句在启动后立即执行
-
多线程,编辑并继续。 ThreadPools 是一个奇迹(大部分时间)。有时,解决方案和代码的复杂性只会破坏视觉工作室。我注意到一些第三方组件只是破坏了这种代码,甚至可能是一些可重入代码破坏了调试器等。
标签: c# .net visual-studio debugging