程序调试总结 04-18

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),在程序其它地方仍然还在被引用,所以出现了异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值