【问题标题】:Log a stack trace when Windows detects app hang当 Windows 检测到应用挂起时记录堆栈跟踪
【发布时间】:2011-11-14 14:58:13
【问题描述】:

Windows 7 窗口管理器会定期将我的 WPF 应用程序检测为 hung,将其复制并弹出无响应消息。我已经使用该应用程序几个星期了,但还没有看到它,但使用与我相同硬件的用户说他经常使用它。

所有可以在另一个线程上的任务中运行的东西,所以我不确定从哪里开始寻找问题。如果用户等待应用程序响应,它会很快恢复,所以我假设问题出在 GUI 线程上,偶尔需要 5 多秒才能运行。

有什么方法可以检测到 DWM 认为应用程序何时挂起,以便我可以记录堆栈跟踪?

【问题讨论】:

    标签: wpf c#-4.0 windows-7


    【解决方案1】:

    我没有在 WPF 应用程序中执行此操作,但传统方式是使用 SendMessageTimeout 从后台线程每隔一段时间发送一条 WM_NULL 消息,如果主 UI 线程不处理该消息,比如说,30 秒,为该线程生成一个堆栈转储。

    【讨论】:

      【解决方案2】:

      一种方法是使用System.Diagnostics 命名空间编写程序跟踪。有了它,您可以找出程序挂断之前的最后一个操作。当 Windows 认为某个程序被挂起时,您几乎不会检查它。 :-(

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 2021-02-07
        • 2011-06-23
        相关资源
        最近更新 更多