与这个问题有关。有关修复下面的问题的任何建议?
经过许多对这个程序的试验,我发现了几件事情。
它在运行代码行
Set Message = New CAPICOM.EncryptedData
时相对一致地崩溃(约90%的时间)。请注意,上面的行仅是Dim Message As CAPICOM.EncryptedData
。调用该函数的函数在程序执行过程中先被调用时不会崩溃。二分查找错误并不能找到问题,因为在某些地方神秘地、不可靠地调用该函数可以防止 bug 出现。有时重新构建程序似乎会影响该 bug 是否出现。是的,它是一个希森巴格。时间二分查找错误也存在同样的问题。花费 5 小时比较程序的两个版本,只发现两个版本都有的 bug,尽管只有其中一个版本目前显示症状,这并没有多少实际效果。
崩溃是由于访问冲突0xC00000005引起的。
运行WinDbg(Windows调试器)发现只有一行代码读取了这个内存位置,
LoadPicture(szTmpBMP) code>。它在一个可怕的函数的末尾被调用,该函数从资源中获取图片并将其放入临时文件中。我对这个函数感到恐惧,为了测试的缘故,我用
LoadPicture(“testcra.bmp”) code>替换了它,然后没有为此位图调用可怕的资源函数。这并没有帮助。完全删除这个Loadpicture调用也没有帮助,尽管调试器不再能找到读取受影响内存的任何点,并且受影响的内存不再位于同一位置。这个测试是在一个虚拟机上进行的,因此一些内存读取可能不会被调试器看到。
在Vista上一切正常(我的本地机器和一个Vista虚拟机)。访问冲突只会发生在XP上。
我正在使用VB6版本8176,6.0.8169。