【问题标题】:Application hangs when calling external constructor -- troubleshooting steps?调用外部构造函数时应用程序挂起 - 故障排除步骤?
【发布时间】:2011-02-09 03:36:08
【问题描述】:

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

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

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

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

我不得不假设这两个项目之间的环境差异存在一些问题,但我对如何继续追踪问题感到有些困惑。我是否必须以某种方式安排事务,以便我可以中断 avalonedit 源?

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

【问题讨论】:

  • 如果在挂起期间暂停调试器会发生什么?
  • 这就是Reflector 派上用场的地方!
  • 我建议选择 AvalonEdit 的源(和/或 PDB),然后在调试器中点击暂停以查看问题。另一种方法是使用 Reflector(正如 Mayank 建议的那样)检查 avalonedit 构造函数源,以查看潜在的循环原因。

标签: c# .net wpf dll avalonedit


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多