如何了解有关Application Hang事件的更多信息?

时间:2012-04-05 12:41:23

标签: vb6 event-log hang

如果VB6应用导致Application Hang事件出现在事件查看器中,我该如何找到有关应用程序挂起原因的更多信息?

Application Hang事件是否意味着该应用已冻结和崩溃,或者只是暂时挂起?

我参加此活动的事件日志是:

Hanging application [MyAppName].exe, version [MyAppVersionNo], hang module hungapp, version 0.0.0.0, hang address 0x00000000.

这还不够,我希望能够更多地了解它悬挂的原因。需要采取哪些代码更改或其他步骤才能使应用程序在事件日志中提供更多详细信息?

4 个答案:

答案 0 :(得分:5)

我建议使用Windows性能工具包。要使用的最佳版本是Windows Assessment&部署工具包,http://www.microsoft.com/download/en/details.aspx?id=28997

安装完成后,您所做的就是启动Windows性能记录器(WPR)并单击“开始”按钮开始录制。接下来,使用您的应用重现问题。然后返回WPR并按“保存”按钮。接下来,加载Windows性能分析器并打开生成的* .ETL文件。然后,您想要转到Graph Explorer中的System Activity部分,展开它,找到UI Delays图(或者它可能是停留在System Activity上的第一个图)。双击它以在分析选项卡中获取详细版本。

找到您感兴趣的UI延迟后,您可以在Graph Explorer中的Processing节点中添加另一个图表,例如CPU Usage(Sampled)。当两个图形位于同一分析选项卡中时,它们的滚动和选择将同步。因此,您可以单击UI延迟事件,它还将突出显示CPU使用率中的相应范围。

答案 1 :(得分:2)

Application Hang事件表示Windows已确定应用程序没有响应。由于事件是由操作系统而不是应用程序生成的,因此您在事件中获取其他信息的选项非常有限。

这是应用程序挂起事件似乎可用的内容:

消息:挂起应用程序%1,版本%2,挂起模块%3,版本%4,挂起地址0x%5。

自:

http://www.microsoft.com/technet/support/ee/transform.aspx?ProdName=Windows+Operating+System&ProdVer=5.2&EvtID=1002&EvtSrc=Application+Hang&LCID=1033

如果您认为事件的原因是您的应用程序所做的事情(而不是运行应用程序的环境中的某些事情),那么您应该提高信息的级别,而不是尝试将信息传递给挂起事件。将信息记录到调试模式并查看应用程序的日志文件,以便在无响应之前查看它正在执行的操作。

如果您的应用程序中缺少日志记录信息或日志记录框架,那么 就是您应该集中精力的地方。好处是,您将来也可以从更好的伐木中受益。但是,请使用日志记录框架,以便在一切运行顺利时禁用生产环境中的调试级别日志记录。

答案 2 :(得分:2)

我会通过查看Windows已确定已挂起的模块中的代码来解决此问题,该模块的名称已写入事件日志。尝试在挂起事件中获取更多详细信息是不可能的,因为当Windows确定应用程序没有响应时,为时已晚。

在挂起的模块中,我会添加多个DoEvents调用,并将状态消息直接记录到EventLog中。此时添加日志记录框架会引入复杂性,并涉及用于存储日志的数据库或文件访问。

Windows认为该应用已挂起,因为它已停止响应消息。不幸的是,与.NET不同,在VB6应用程序中实现第二个线程并不简单。从来没有,添加另一个线程会让应用程序保持响应,但是你可能仍然会回答这个问题,“为什么代码需要这么长时间来执行?”

答案 3 :(得分:0)

从Windows事件角度获取信息无济于事。尝试在您的应用程序中进行跟踪,以帮助您确定原因。

相关问题