Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception ole32.dll导致GPF。如何解释DebugDiag报告?_Exception_Com_Vb6_Debugging_Crash - Fatal编程技术网

Exception ole32.dll导致GPF。如何解释DebugDiag报告?

Exception ole32.dll导致GPF。如何解释DebugDiag报告?,exception,com,vb6,debugging,crash,Exception,Com,Vb6,Debugging,Crash,My app()在退出时导致访问冲突错误。这只发生在一些系统上,大部分是Vista,但在一些XP设备上也发生过。应用程序是用VB6编写的 找到显示此行为的系统后,我在进程上运行了DebugDiag,并得到以下报告: Function Arg1 Arg2 Arg3 0x04246c81 726c7fc8 778bf188 0012fea4 ole32!Co

My app()在退出时导致访问冲突错误。这只发生在一些系统上,大部分是Vista,但在一些XP设备上也发生过。应用程序是用VB6编写的

找到显示此行为的系统后,我在进程上运行了DebugDiag,并得到以下报告:

Function Arg1 Arg2 Arg3 0x04246c81 726c7fc8 778bf188 0012fea4 ole32!CoDisconnectObject+55 726c7fc8 00000000 00000002 msvbvm60!BASIC_CLASS_Release+10b2d 00000002 013e07cc 727ae518 msvbvm60!TipUnloadProject+df2 013e08dc 013e07cc 727ae470 msvbvm60!EbResetProjectNormal+1a54 00000000 00000000 00000000 函数Arg1 Arg2 Arg3 0x04246c81 726c7fc8 778bf188 0012fea4 ole32!CoDisconnectObject+55 726c7fc8 00000000 0000000 2 msvbvm60!基本类发布+10b2d 0000000 2 013e07cc 727ae518 msvbvm60!TipUnloadProject+df2 013e08dc 013e07cc 727ae470 msvbvm60!EbResetProjectNormal+1a54 00000000 00000000 在easyjobpro\uuuuuuuu PID\uuuuuu 5240\uuuuuuu Date\uuuuuuu 18\uuuu 2009\uuuuu Time\uu 09\uu 24\uuuuu 01PM\uuuuu 619\uuuuuu Second\u Chance\u Exception\u C000005.dmp中,模块C:\Windows\System32\ole32.dll在尝试写入线程0上的内存位置0x726c7fc8时引发访问冲突异常(0xc000005)

好的,看起来是OLE32.dll导致了这个问题,但是我如何修复它呢????O:-) 有没有办法获得更长的堆栈跟踪,这样我就可以真正看到我的代码的哪一部分开始了这件事?这似乎与正在卸载的某个类(BASIC_class_Release)有关,但如何确定是哪一个? 有人知道为什么这会发生在Vista上吗?
这东西快把我逼疯了,所以任何帮助都将不胜感激。说真的,不管你在哪里,我都会请你喝啤酒。O:-)

退出时的GPF通常是由错误的去初始化顺序引起的。例如,可能发生了以下情况:一些释放所有对象的代码已经被调用,现在您有了一个悬空指针,当前正在执行的代码正试图释放同一个对象。由于对象不再存在,因此您将获得一个GPF


这种情况通常很难调试。您需要的是一个专用的去初始化,在这里您可以断开、完成、刷新、关闭在运行程序时初始化的所有对象。在大多数情况下,您只需将指向对象的pointet设置为
Nothing
——内置的资源管理将使对象正确地去初始化。您必须在整个程序终止开始之前执行此代码,例如在关闭主窗口时。

我发现在这些情况下,VB窗体通常引用对象。如果在卸载事件中将表单变量设置为Nothing,并确保在使用表单之后或在应用程序关闭之前调用卸载,则GPF将消失。

您可以尝试使用John Robbins'查看十六进制地址(0x04246c81)是否对应于您自己的任何代码。可能会为您提供涉及哪些对象的线索。使用调试信息构建应用程序以创建PDB。然后用新应用程序再次复制错误(因为PDB信息将更改exe中的十六进制地址)

Crashfinder.exe位于此目录中。执行“新建文件”以创建新项目,然后编辑“添加图像”以加载exe。然后编辑Find Crash并输入新的十六进制地址。它将告诉您与十六进制地址对应的源文件和例程(如果在您自己的代码中)