我在现场的某个特定软件上弹出了一个完全随机的错误。该应用程序是用 VB6 编写的游戏,在 Windows 7 64 位上运行。每隔一段时间,应用程序就会崩溃,并出现一个通用的“program.exe 已停止响应”消息框。该游戏可以连续几天正常运行,直到出现此消息,或者在几个小时内。没有异常被抛出。
我们以 Windows 2000 兼容模式(这是它的原始操作系统)运行此应用程序,禁用视觉主题,并以管理员身份运行。应用程序本身在使用外部组件和 API 调用方面非常简单。
参考:
Visual Basic for Applications
Visual Basic 运行时对象和过程
Visual Basic 对象和过程
OLE 自动化
Microsoft DAO 3.51 对象库
Microsoft 数据格式化对象库
组件:
Microsoft Comm Control 6.0
Microsoft Windows Common Controls 6.0 (SP6)
Resizer XT
如您所见,这些工具大部分都是非常简单的 Microsoft 标准工具。数据库组件的存在是为了与用于记账的 Access 数据库进行交互,并且插入了Resizer XT以更轻松地将这款游戏从原来的 800x600 分辨率移动到 1920x1080。
信息亭没有启用网络;没有网络驱动程序,因此没有与远程数据库的连接。一切都封装在一个盒子里。
在 Windows 应用程序事件日志中,当发生这种情况时,有一个事件 ID 1000 导致看似随机的模块出现故障 - 到目前为止,要么是 ntdll.dll 要么是 lpk.dll。在 API 调用方面,我没有看到任何来自 ntdll.dll 的内容。我们将 kernel32、user32 和 winmm 用于各种文件系统和声音功能。我无法重现,因为它是完全随机的,所以我什至不知道从哪里开始进行故障排除。有任何想法吗?
编辑:更多信息。在其他一些开发人员的建议下,我尝试了几个不同版本的 Dependency Walker,最新版本显示我缺少 IESHIMS.dll 和 GRPSVC.dll(这两个似乎是 Depends.exe 中众所周知的错误) ,并且我在 COMCTRL32.dll 和 IEFRAME.dll 中缺少符号。那里有任何线索吗?