【问题标题】:.NET App Hangs in Release mode only, sometimes ... :-(.NET 应用程序仅在发布模式下挂起,有时... :-(
【发布时间】:2011-01-12 16:41:12
【问题描述】:

在我们的程序中,您可以从列表中选择文档类型。然后单击“确定”,或双击所选项目,将创建并显示一个新文档。

现在的问题是,有时,仅在发布模式下,当您双击某个项目时,应用程序会挂起。您仍然可以移动窗口,并且一切都重新粉刷得很好,但是没有任何响应... 在调试模式下,完全没有问题......而且,大多数时候一切正常??? 没有显示错误信息...我们所能做的就是终止进程...

我们如何找出导致挂起的原因?

【问题讨论】:

  • 它是多线程应用程序吗?会不会是某个地方出现了死锁?

标签: c# .net release freeze


【解决方案1】:

您是否介绍了一些日志记录?您可以使用例如log4net 来执行此操作。结合PostSharp,您可以快速为所有方法入口/出口添加一些日志记录,看看是否发生了一些奇怪的事情。
(甚至还有一个名为Log4PostSharp的项目,但我从未尝试过。

【讨论】:

    【解决方案2】:

    在 Visual Studio 中,使用工具 + 附加到进程并选择您的程序。如有必要,使用 Debug + Windows + Threads 选择线程。 Debug + Break All,查看调用栈,看看死锁的地方。

    【讨论】:

    • 谢谢 nobugz - 就是这样! .... 我有 1 个主线程和 7 个工作线程。主线程似乎正在访问资源(翻译文件):mscorlib.dll!System.Resources.RuntimeResourceSet.GetString(string key, bool ignoreCase) + 0x12 bytes .......... 唯一的工作线程代码似乎正在等待(在主线程上?)[在睡眠、等待或加入] mscorlib.dll!System.Threading.WaitHandle.WaitOne(long timeout, bool exitContext) + 0x2f bytes 那么这是否意味着应用程序是等待加载资源??
    • 显然,很奇怪。将整个堆栈跟踪复制并粘贴到您的问题中。
    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多