【问题标题】:Debugging program freeze on another machine在另一台机器上调试程序冻结
【发布时间】:2016-05-25 00:06:43
【问题描述】:

我有一个应用程序表现出奇怪的行为,我无法弄清楚。它在我的机器和许多用户机器上运行良好。但是在某些机器上,似乎是随机的,它只是挂起。我能够与用户进行在线支持会议,并在系统停止时在他们的系统上运行跟踪。这是一个跟踪屏幕截图:

似乎在 30 秒中有 29.6 秒的时间里,一些线程一直在等待对方完成,并且被调用了将近 6,000 次。我一直在尝试用谷歌搜索它,并且在这里也看到了很多,从我收集到的信息来看,这表明存在线程死锁情况。问题是这个应用程序只在几个位置使用后台线程,据我所知,这个构造函数不应该是其中之一。这是构造函数的代码:

        InitializeComponent();

        if (KMApplication.Settings != null)
        {
            _useWin10 = KMApplication.Settings.ForceSpellingMode == SpellChecker.SpellingModes.Windows10
                || (KMApplication.Settings.ForceSpellingMode == SpellChecker.SpellingModes.Automatic && Utility.IsWindows10());
        }

此控件的 XAML 很长,但如果需要,我可以复制它...

所以我的问题是,是否有人可以从中看出发生了什么,或者如果不是,那么在这里寻找问题的最佳方法是什么?

【问题讨论】:

  • 你使用外部DLL吗???也许你错过了其他机器上的那些 dll...
  • 您可以随时寻找程序中的某些弱点并尝试捕捉潜在的异常。发生异常时,只需显示带有错误消息的基本对话框(或根据发生的情况创建自己的对话框)。如果无法显示对话框,请将其写入控制台。此外,请仔细检查第二个系统是否安装了适当的框架。
  • 我确实使用了外部 dll,但我已经验证它们都安装在有问题的目标机器上,所以我不认为是这样。此外,它不会抛出异常而不仅仅是停滞不前吗?同样在有问题的机器上,它似乎停止了大约 6 或 7 分钟,然后又回来了
  • @kill4silence 我想我要问的是我该如何寻找弱点?由于这似乎是一个线程问题,我不确定从哪里开始。我在我的代码中寻找了任何线程调用,但我很少,我不确定它们如何锁定......
  • 如果安装了错误的框架,我相信程序不会运行。如果是这样,但崩溃了,它必须是别的东西。至于寻找弱点,你如何去做完全取决于你编写的代码。任何时候你不确定某事,调试它。你会惊讶于一件小事如何让一切都出错,即使一开始看起来并没有那么糟糕。

标签: c# wpf multithreading


【解决方案1】:

好的,经过大量的调试和测试后,我发现这根本与线程无关。它实际上与所有事物的拼写检查有关。它最终成为this question 中显示的问题。如果您查看 am7zd 的答案,他们会准确描述问题的最终结果。不知道为什么它在跟踪中以这种方式显示,但它具有误导性,它实际上是在所有文本框中注册了一堆字典,并花费了很长时间来创建它们。在这个用户的情况下,该设置中有大约 1800 个不存在的文件,一旦我清除它们,一切都会恢复正常速度。

希望能帮助遇到类似问题的人...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2018-01-06
    • 2019-10-26
    相关资源
    最近更新 更多