程序调试总结 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),在程序其它地方仍然还在被引用,所以出现了异常。
经调试,在call eax这条汇编语句中,查出函数地址就是g的地址;而f和g的地址只差4个字节;
于是检查DLL头文件,找出了原因:dll和h文件不匹配
2.现象:某个对象内有一个map成员,后来在某个地方遍历该map时抛出了异常。
经调试,发现该map已经被损坏,内部的头指针为0;
于是在该对象的map成员前后各加了一个char变量,再调试,当然还是抛异常,但是char变量都没有被修改,
排除了内存越界写坏的可能;
再测试。。在构造函数中将char变量设置为'a',析构函数中设置为'b';
发现当抛出异常的时候,char变量值为'b';这显然是一个已经析构了的对象;
原因:该类对象使用了对象池,当对象已经被归还给对象池之后(析构、但内存不会归还给OS),在程序其它地方仍然还在被引用,所以出现了异常。
相关文章推荐
- xcode免证书真机调试iphone(ipad)程序的具体方法(总结贴))
- VS2005下编译调试保护模式32位汇编程序总结
- 总结android模拟器使用PC的串口调试程序的完整过程。
- 利用Console来调试JS程序、Console用法总结
- gdb调试多线程程序总结
- NesC学习经验总结:第三篇 如何调试NesC程序
- Windbg程序调试系列1-Mex扩展使用总结
- vc6.0程序调试技术总结
- 利用Console来调试JS程序、Console用法总结(1)
- 使用NetBeans + Xdebug调试PHP程序[总结]
- Hadoop 调试第一个mapreduce程序过程详细记录总结
- evc++程序的调试经验总结
- gdb调试多线程程序总结
- vc6.0程序调试技术总结
- 调试Python程序代码的几种方法总结
- 一次工作中程序bug的调试总结
- VS2010+VMWare 远程调试exe程序的配置总结
- 调试程序的方法总结
- 使用gdb调试多线程程序总结
- 逗B少年搞程序04 装饰模式——又是一波非常规性总结