您的位置:首页 > 其它

程序调试总结 04-18

2011-04-19 09:33 197 查看
1.现象:程序中调用DLL中的某个函数f,但是断点跟踪,却调用了函数g而不是f

经调试,在call eax这条汇编语句中,查出函数地址就是g的地址;而f和g的地址只差4个字节;

于是检查DLL头文件,找出了原因:dll和h文件不匹配

 

2.现象:某个对象内有一个map成员,后来在某个地方遍历该map时抛出了异常。

  经调试,发现该map已经被损坏,内部的头指针为0;

 于是在该对象的map成员前后各加了一个char变量,再调试,当然还是抛异常,但是char变量都没有被修改,

 排除了内存越界写坏的可能;

再测试。。在构造函数中将char变量设置为'a',析构函数中设置为'b';

发现当抛出异常的时候,char变量值为'b';这显然是一个已经析构了的对象;

 

原因:该类对象使用了对象池,当对象已经被归还给对象池之后(析构、但内存不会归还给OS),在程序其它地方仍然还在被引用,所以出现了异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dll 汇编 测试 os