.net - 什么会导致 WPF 应用程序因 AppHangB1 问题事件名称而崩溃?

标签 .net wpf debugging crash

我当前正在处理的程序偶尔会因 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/

相关文章:

c# - SQL Server CE 没有从另一个进程中获取更新?

c# - 对 InfoPath 表单进行数字签名

c# - 没有 ASP.NET 标识的 .NET Core 外部身份验证

wpf - 从 ViewModel 闪烁图像

c - 共享库中的 gdb 断点不起作用

c# - 同一命名空间如何在具有不同项目的单个解决方案中工作

wpf - 将可见性绑定(bind)到 Text.Length

c# - Wpf 数据触发值可以是通用类型吗?

c++ - 为什么我的程序在VS2013中调试时打不开文件?

Chrome 开发人员工具中不可用的 Angular 12 调试源代码在 Angular 11 中很好