调用外部构造函数时应用程序挂起 - 故障排除步骤?

时间:2011-02-09 03:36:08

标签: c# .net wpf dll avalonedit

这可能是一个很长的镜头,但我没有想法。

我有一个VS C#解决方案,里面有三个项目。有一个类库项目,然后是两个依赖于该类库的应用程序项目。类库依次依赖于其他一些DLL,包括sharpdevelop项目中的avalonedit dll。

其中一个应用程序正在构建和运行良好,包括使用我自己的控件来包装avalonedit控件。另一个应用程序无法运行,并且在我的包装控件中通过XAML初始化avalonedit控件时,它似乎失败了。

问题是我根本没有看到调试输出中的任何错误,我看到的只是加载了dll的消息,然后什么都没有。如果我进入我控制的构造函数,该步骤永远不会完成。调试器说应用程序正在运行,但是当XAML端构建底层编辑控件时,它显然在avalonedit dll中的某处旋转。

我必须假设两个项目之间存在环境差异的问题,但我对如何继续跟踪问题感到困惑。我是否必须以某种方式安排事宜以便我可以在avalonedit源中休息一下?

编辑:如果我暂停/中断所有它只是回到调用我的控件构造函数的行。

1 个答案:

答案 0 :(得分:1)

听起来像僵局。仔细查看所有线程,它们的堆栈跟踪和同步原语(锁,信号量等)。请记住:争用资源可能不是显式的(例如,当您在静态构造函数内部等待某些尝试访问正在构造的类型的静态字段的内容时,您会遇到死锁)。

有很多方法可以引入死锁,但没有简单的建议来处理它。您还可以在Visual Studio中启用break中的所有异常(Debug - > Exceptions ...并勾选CLR Exceptions)。

如果这没有帮助,你可以在这里提供堆栈跟踪,也许有人可以发现问题。