【问题标题】:What can cause a WPF application to crash with an AppHangB1 Problem Event Name?什么会导致 WPF 应用程序因 AppHangB1 问题事件名称而崩溃?
【发布时间】:2009-04-01 17:47:09
【问题描述】:

我目前正在处理的程序偶尔会因 AppHangB1 问题事件而挂起。我已经将它追溯到一系列特定的操作,但它似乎是一种黑森错误,因为每当我单步执行代码时,它都不会表现出来。一旦程序挂起,我就无法暂停程序以查看它在 Visual Studio 中的挂起位置。这个应用程序中发生了很多事情(非托管互操作、多线程等),所以在我的特定应用程序中可能有很多事情是错误的。

我不是在寻找任何人来为我解决我的问题,我只是想知道哪些类型的事情会导致这种类型的挂起?我在谷歌上找到了几个点击,但没有任何帮助。任何有助于查明问题的 .NET 应用程序调试技巧也会有所帮助。

【问题讨论】:

    标签: .net wpf debugging crash


    【解决方案1】:

    当 UI 线程在几秒钟内没有响应消息并且用户尝试终止它时,将触发 AppHangB1 事件。挂起几乎可以由任何原因引起:代码中的繁忙循环、在 UI 线程上执行网络或磁盘 I/O、UI 线程被执行长时间运行任务的后台线程持有的锁阻塞,等等。

    Visual Studio 无法在挂起时中断,这有点令人担忧。您附加的是仅托管调试还是混合模式调试?您可以尝试使用 Windbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx) 以非侵入方式附加到进程并尝试获取挂起线程的堆栈跟踪(您想查看使用 !clrstack 来获取托管堆栈跟踪)。 Windbg 的学习曲线非常陡峭,因此您可能只想收集可以在 Visual Studio 中调试的转储。

    【讨论】:

    • 我的调试技能并没有超出 VS2008 工具的范围。我过去使用过WinDbg,但不是很熟悉。在应用程序挂起的情况下,我无法获得跟踪(在 VS 或 WinDbg 中)。当我的应用挂起时,两个调试应用都会挂起。有关如何获取跟踪的任何建议?
    • 尝试远程调试。如果您的应用程序正在执行一些非常奇怪的操作并导致桌面崩溃,那么进行远程调试可能会有所帮助,因为您的应用程序无法挂起它的 UI。
    猜你喜欢
    • 2014-12-24
    • 2011-09-24
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2020-05-26
    相关资源
    最近更新 更多