分享
 
 
 

深入ADO内部调试

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

最近在做一个DataGrid链接DBF数据库的工程。DataGrid的数据是ADO Recordset。在操作DBF文件时常常出现ADO内部爆出的错误。这些错误有些很难调试。我们知道ADO是通过OLE DB操作数据库的。这些操作通常都会转化为对数据库的SQL语句。我们如果能知道最终的SQL语句是什么,就对调试有很大帮助。我链接数据库的Connect String 是:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\;Extended Properties=DBASE 5.0"。

查找注册表后得到实现Provider的文件是:msjetoledb40.dll。用Depends工具查看这个文件发现只导出了通常COM都会导出3个接口。它的内部都有什么还是不知道。找到它的符号文件,msjetoledb40.pdb。随便用文本工具打开它,会发现依稀有OLE DB COM借口和函数的影子。用PDBDUMP工具把他的符号导出。这次看得清楚多了!很快找到这样一个符号:SetCommandText@CImpICommandText@@UAGJABU_GUID@@PBG@Z,显然CImpICommandText是实现ICommandText接口的类,如果编写过OLE DB Provider就会知道SetCommandText的第二个参数保存着那个神秘的SQL字符串。好想看看里面是什么!

接下来要在SetCommandText函数上设断点,这个断点可不好设。看到PDBDUMP的该函数输出上前面有<rva 0x62a0>,rva这不就是偏移地址嘛!赶快开动visual c++ debug程序。打开Moduals窗口,找到msjetoledb40.dll那一项,看看它的载入地址,然后再加上偏移。在这个最终地址上设立断点。运行程序,发现什么也没发生!!!Faint!!!看来那个rva是个冒牌的。没时间去研究PDBDUMP的源码了。只能另取它法。我们有符号,想找到它的内存地址。很简单嘛,突然想起WinDebug了。它有个命令:x 。就是完成这项工作的!只能先用WinDebug了。在WinDebug中打开程序。当msjetoledb.dll已经调入内存后,运行: x msjetoledb!*SetCommandText*。找到的一个就是ICommandText接口SetCommandText的地址。注意一定要把msjetoledb40.pdb装入才能找到呀!拿到这个地址,在VC中设端点,果然断掉了。成功了一半了!打开堆栈窗口,看看是谁调用SetCommandText,在call语句之前,肯定有push 语句,这个函数有两个参数,其中第一个push就是SQL字符串的地址。 突然发现堆栈是错误的。那就打开内存窗口,察看esp,esp指向的值,在断掉的那一刻指向是返回地址,加4是ICommandText实现类的地址,再加4是第一个参数,再加4就是Sql字符串的地址,察看地址的内容,My GOD!他终于出来了!

试验了一下。当我在DataGrid中修改值后,断点会马上激活,字符串显示果然就是ADO参考书上的“Update "语句。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有