当我第二次运行VB6应用程序时,我得到了真正常见的自动化错误。但是,在VB6调试模式下,代码工作正常。在我编译代码并第二次运行某些函数之后,我会遇到自动化错误2147417848 - 调用的对象已与其客户端断开连接。
然后我通过Visual Studio调试应用程序并得到以下异常错误:
vb6_2_12_2015.exe中0x76B33E8D(oleaut32.dll)的未处理异常:0xC0000005:访问冲突读取位置0x01289B5C。
是因为我的dll注册有问题吗?
答案 0 :(得分:0)
该消息表示您的程序正在访问已释放或从未存在的内存(即变量或对象)(通常是因为创建失败且程序员未检查)。 64K以下的内存地址表示分配失败。
首先,编译程序时不需要优化和调试信息。崩溃时执行堆栈跟踪,列出函数和参数。
您也可以从调试器开始。
windbg或ntsd(ntsd是一个控制台程序,可能已安装)。两者都来自Windows调试工具。
下载并安装适用于Windows的调试工具
http://msdn.microsoft.com/en-us/windows/hardware/hh852363
安装Windows SDK,但只需选择调试工具。
在C:\
中创建名为Symbols的文件夹启动Windbg。文件菜单 - 符号文件路径并输入
srv*C:\symbols*http://msdl.microsoft.com/download/symbols
然后
windbg -o -g -G c:\windows\system32\cmd.exe /k batfile.bat
您可以按F12
停止它,kb
将显示调用堆栈(g
继续程序)。如果有错误,它也会停止并显示它们。
键入lm
列出已加载的模块,x *!*
列出符号,bp symbolname
设置断点
da displays the ascii data found at that address
dda displaysthe value of the pointer
kv 10 displays last 10 stack frames
lm list modules
x *!* list all functions in all modules
p Step
!sysinfo machineid
如果在VB6中编程,则此环境变量link = / pdb:none将符号存储在dll中而不是单独的文件中。确保使用No Optimisations编译程序并勾选Create Symbolic Debug Info框。两者都在项目属性的“编译”选项卡上。
CoClassSyms(microsoft.com/msj/0399/hood/hood0399.aspx)也可以从类型库中创建符号。