http://dmalloc.com/ 上下载dmalloc-5.5.2.gz,解压。修改configure文件,把ac_cv_page_size=0 改成 ac_cv_page_size=12
./configure --prefix=/home/cbm/workplace/dmalloc/output/ --exec-prefix=/home/cbm/workplace/dmalloc/output/CC=arm-buildroot-linux-uclibcgnueabihf-gcc --host=arm-linux CXX=arm-buildroot-linux-uclibcgnueabihf-g++ AR=arm-buildroot-linux-uclibcgnueabihf-ar LD=arm-buildroot-linux-uclibcgnueabihf-ld --enable-threads --enable-shlib
由于auto脚本对交叉编译支持不够完善,所生成的Makefile有少数命令需替换,如ld-G,ar cr。改成$(LD) -G 和 $(AR) cr
make CC=arm-buildroot-linux-uclibcgnueabihf-gcc CXX=arm-buildroot-linux-uclibcgnueabihf-g++ AR=arm-buildroot-linux-uclibcgnueabihf-ar LD=arm-buildroot-linux-uclibcgnueabihf-ld
make install,即可在prefix目录生成bin include和lib。
dmalloc工具进行环境变量设置,如:dmalloc -l /tmp/dmalloc.log all,即输出所有信息并存入dmalloc.log文件;
# dmalloc -l /tmp/dm.log all DMALLOC_OPTIONS=debug=0xcf4ed2b,log=/tmp/dm.log ` export DMALLOC_OPTIONS `
在主代码中添加#include <dmalloc.h>
更改Makefile,添加CFLAGS += -Iinclude LDFLAGS += -L$(TOP)/dmalloc -ldmalloc
重新build需要detect的应用
通过dmalloc所生产的变量DMALLOC_OPTIONS,手动或自动export到系统中
执行需detect的应用
查看变量DMALLOC_OPTIONS中所定义的导出文件内容
退出需detect的应用
查看变量DMALLOC_OPTIONS中所定义的导出文件内容
上述过程所查看的导出文件存在“not freed:”字串,则为leak点