3

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

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

4

1 回答 1

7

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

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

于 2009-04-01T18:02:39.077 回答