内存调试总结

内存常见的bug有:

1 内存泄漏

2 内存管理错误 -- new delete malloc free 使用混乱

3 读取未初始化的内存

4 缓冲区溢出 -- 使用已分配内存之外的内存! 如数组越界情况

常见的工具有:

visual leak detector

purify

valgrind (工具很多)

bound checker


对于 visual leak detector 使用:

在tool -》option -》中的vc++ directories   中加载相应的include 文件,以及lib 文件,之后

在所用的文件加入#include <vld.h> 。当程序运行时,将会有相应的内存泄露信息,以及堆栈信息提示。

并会定位相应的泄露行号。


内存使用剖析

1 先检查内存bug。

2 估计内存使用值。

3 测量内存使用值。

4 判断是否有内存占用较大使用不当。

对于内存使用值检测:

1 简单的任务管理器查看,大概估计,误差大。

2 插桩的方式,通过代码估算使用的内存。(主要是动态的,如数据结构或其他使用的。)

3 使用工具。

工具:

AQtime

massif

等。


以下补充线程的调试。

并行的问题是竞态条件(数据,代码)。

首先调试的话,会改变程序运行的时序。并不能真正反映实情。

方法如下:

(1)使用日志查看,或者插桩打印信息。

(log函数短小精悍,也还是有可能影响竞态条件。加了log,程序没有问题;去掉log,程序随机崩溃。1,可能是log函数问题。2 可能影响竞态条件。)

可用printf之后立马fflush。

(2)在代码中加断言,当本应该成立的断言出错,就可以用找到问题。

(3)注意是否是多cpu  等问题,分别测试单cpu与多cpu。

(4) 使用工具分析。

工具: (以下工具可检测死锁!)

intel 的 Thread  cheaker 

helgrind ( 开源) -- Valgrind 工具 (很强大!) ---Valgrind简单用法 :http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值