Windows 7 Windows 7和VB6:事件错误ID 1000

Windows 7 Windows 7和VB6:事件错误ID 1000,windows-7,crash,Windows 7,Crash,我有一个完全随机的错误出现在一个特定的软件在外地。该应用程序是一个用VB6编写的游戏,运行在64位Windows 7上。每隔一段时间,应用程序就会崩溃,出现一个通用的“program.exe已停止响应”消息框。此游戏可以连续几天正常运行,直到出现此消息,或者在几个小时内。没有引发异常 我们以Windows 2000兼容模式(这是其原始操作系统)运行此应用程序,禁用视觉主题,并以管理员身份运行。应用程序本身在使用外部组件和API调用方面非常简单 参考资料: Visual Basic for App

我有一个完全随机的错误出现在一个特定的软件在外地。该应用程序是一个用VB6编写的游戏,运行在64位Windows 7上。每隔一段时间,应用程序就会崩溃,出现一个通用的“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通用控件6.0(SP6)
增塑剂XT

正如您所看到的,这些都是非常简单的微软标准工具。数据库组件的存在是为了与用于记账的Access数据库进行交互,而插入的是为了更轻松地将此游戏从原来的800x600分辨率移动到1920x1080

信息亭上没有启用网络;没有网络驱动程序,因此没有到远程数据库的连接。所有东西都封装在一个盒子里

在Windows应用程序事件日志中,当发生这种情况时,会有一个事件ID 1000对一个看似随机的模块(到目前为止是ntdll.dll或lpk.dll)进行故障处理。在API调用方面,我没有看到任何来自ntdll.dll的调用。我们正在使用kernel32、user32和winmm来实现各种文件系统和声音功能。我无法复制,因为它是完全随机的,所以我甚至不知道从哪里开始故障排除。有什么想法吗


编辑:更多信息。在其他开发人员的建议下,我尝试了几个不同版本的Dependency Walker,最新版本显示我缺少IESHIMS.dll和GRPSVC.dll(这两个似乎是dependens.exe中众所周知的错误),并且我在COMCTRL32.dll和IEFRAME.dll中缺少符号。有什么线索吗?

来自应用程序事件日志的消息没有那么有用-您需要的是来自流程的事后流程转储-这样您就可以看到代码中哪里出了问题

每次我看到这些问题中的一个,通常归结为一个坏的API参数,而不是一些更奇怪的问题,这可能是由坏数据传入引起的,但通常是一个好的ol风格的错误导致了问题

正如您可能已经想到的,这并不容易调试;理想情况下,您需要调试一个可重复的故障案例,而不是依赖于从远程计算机捕获转储文件,但在您能够使其可重复之前,远程转储是唯一的解决方法

沃森博士过去经常这样做,但现在已不再发货,因此有以下替代方案:

您需要得到的是一个小型转储,其中包含进程空间的重要部分,不包括标准模块(例如Kernel32.dll),并用版本号替换转储

有使用调试工具附带的cdb.exe的-的说明,但关键是注册表项
\\HKEY\u LOCAL\u MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug

您可以更改代码以添加更好的错误处理—如果您可以将原因缩小为几个过程,并使用中描述的技术直接处理映射文件,则这一点尤其有用

一旦你有了一个小型转储文件和符号文件,WinDbg将是挖掘这些转储文件的首选工具——然而,要发现原因可能需要一段旅程

另一个我认为的,这取决于你的应用程序结构,是试图捕获所有输入事件来重放。


另一种选择是查找VMWare 7.1的副本,该副本包含并使用该副本作为捕获可复制步骤集的第一步。

右键单击可执行对象,使其与WINXP兼容
当您发现问题的根源并最终解决它时

您正在处理USB吗?我有一个activeX项目,它有类似的崩溃(ntdll.dll)。在我们更新第三方USB接口(打印机)的驱动程序后,问题得到解决。该软件的作用是什么?lpk是一个语言包dll,ntdll有时会因意外关闭而损坏(或因硬件故障而引发错误)。因此,范围很广…@Esen-我们正在处理使用ATEN驱动程序的USB串行适配器。然而,这是一个我们一直在使用的硬件,还有我们一直在使用的驱动程序。@Alfabravo-该软件是一个基本上作为独立信息亭运行的游戏。有很多人最终都看到了这一点。一般来说,有没有关于ntdll疑难解答的资源?“到目前为止,它似乎是最常见的来电者。”我在问题中详细阐述了qballer,以便更详细地说明我们正在做什么。我现在在事件日志中得到的唯一错误是事件ID 1000,错误为ntdll.dll。你能推荐一个剖析器吗?我要把它全部设置好,也许去一个偏远的地方,把它设置成一只豚鼠。谢谢你提供的所有信息。这让我有很多工作要做。