我当前正在处理的程序偶尔会因 AppHangB1 问题事件而挂起。我已将其追溯到一系列特定的操作,但它似乎是一种 heisenbug,因为每当我单步执行代码时,它都不会表现出来。一旦程序挂起,我就无法暂停程序以查看它在 Visual Studio 中挂起的位置。该应用程序中发生了很多事情(非托管互操作、多线程等),因此在我的特定应用程序中可能有很多错误的事情。
我并不是在寻找任何人来解决我的问题,我只是想知道什么类型的事情可能会导致这种类型的挂起?我在谷歌上找到了一些点击,但没有任何帮助。任何有助于查明问题的 .NET 应用程序调试技巧也会有所帮助。
最佳答案
当 UI 线程几秒钟内没有响应消息并且用户尝试终止它时,会触发 AppHangB1 事件。挂起可能是由任何原因引起的:代码中的繁忙循环、在 UI 线程上执行网络或磁盘 I/O、UI 线程被执行长时间运行任务的后台线程持有的锁阻塞,等等。
令人担心的是 Visual Studio 无法在挂起时中断。您附加的是仅托管调试还是混合模式调试?您可以尝试使用 Windbg ( http://www.microsoft.com/whdc/devtools/debugging/default.mspx ) 以非侵入方式附加到进程,并尝试获取挂起线程的堆栈跟踪(您想查看使用 !clrstack 来获取托管堆栈跟踪)。 Windbg 的学习曲线非常陡峭,因此您可能只想收集可以在 Visual Studio 中调试的转储。
关于.net - 什么会导致 WPF 应用程序因 AppHangB1 问题事件名称而崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706649/