android 移植valgrind

自己一直在linux下使用valgrind用于应用内存泄漏,网上也找到了宋宝华老师写的有关源码编译移植的文章。我发现在我android编译后out目录里面就有相关的valgrind文件。所以就懒得下载valgrind源码了。

./target/product/g18ref/symbols/system/bin/valgrind
./target/product/g18ref/symbols/system/lib/valgrind
./target/product/g18ref/symbols/system/lib/valgrind/vgpreload_tsan-arm-linux.so
./target/product/g18ref/symbols/system/lib/valgrind/vgpreload_core-arm-linux.so
./target/product/g18ref/symbols/system/lib/valgrind/memcheck-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/vgpreload_drd-arm-linux.so
./target/product/g18ref/symbols/system/lib/valgrind/massif-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/helgrind-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/vgpreload_helgrind-arm-linux.so
./target/product/g18ref/symbols/system/lib/valgrind/cachegrind-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/vgpreload_memcheck-arm-linux.so
./target/product/g18ref/symbols/system/lib/valgrind/drd-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/callgrind-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/vgpreload_massif-arm-linux.so
./target/product/g18ref/symbols/system/lib/valgrind/none-arm-linux
./target/product/g18ref/symbols/system/lib/valgrind/tsan-arm-linux

第一行是编译出来的bin文件
我把它放在 android 盒子的 data 目录,
第一行之后的都是valgrind所用的库文件
这个库文件可以随便指定。之后用export VALGRIND_LIB= 指定你库文件路径
我开始移植为了小心就和宋宝华老师放的位置一样,
/data/local/valgrind/lib/valgrind

ls /data/local/valgrind/lib/valgrind/                 
cachegrind-arm-linux
callgrind-arm-linux
default.supp
drd-arm-linux
helgrind-arm-linux
massif-arm-linux
memcheck-arm-linux
none-arm-linux
tsan-arm-linux
vgpreload_core-arm-linux.so
vgpreload_drd-arm-linux.so
vgpreload_helgrind-arm-linux.so
vgpreload_massif-arm-linux.so
vgpreload_memcheck-arm-linux.so
vgpreload_tsan-arm-linux.so

开始运行的时候发现少default.supp文件。
把out/target/product/g18ref/obj/lib/default.supp文件移到valgrind就可以了。

在运行valgrind一定要指定库文件路径

export VALGRIND_LIB=/data/local/valgrind/lib/valgrind
#include <stdio.h>
#include <stdlib.h>

main(int argc, char **argv)
{

    char *p = malloc(5);
    char *q = malloc(10);

    //free(p);
    //free(q);
    //
    return;
}

这是我编写的测试文件一看就有问题。
然后拷贝到android的data目录下。

ls data
lost+found
media
misc
pptv
preinstall_md5
property
resource-cache
ssh
system
user
valgrind
xc

其中 pptv是上面的测试文件 valgrind就是./target/product/g18ref/symbols/system/bin/valgrind文件。千万别把上面测试程序命名 test。
在中断下运行命令

./valgrind --leak-check=full --track-origins=yes  ./pptv  
==6285== Memcheck, a memory error detector
==6285== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==6285== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==6285== Command: ./pptv
==6285== 
==6285== 
==6285== HEAP SUMMARY:
==6285==     in use at exit: 15 bytes in 2 blocks
==6285==   total heap usage: 2 allocs, 0 frees, 15 bytes allocated
==6285== 
==6285== 5 bytes in 1 blocks are definitely lost in loss record 1 of 2
==6285==    at 0x4897CCC: malloc (in /data/local/valgrind/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==6285==    by 0x1083C7: ??? (in /data/pptv)
==6285== 
==6285== 10 bytes in 1 blocks are definitely lost in loss record 2 of 2
==6285==    at 0x4897CCC: malloc (in /data/local/valgrind/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==6285==    by 0x1083CD: ??? (in /data/pptv)
==6285== 
==6285== LEAK SUMMARY:
==6285==    definitely lost: 15 bytes in 2 blocks
==6285==    indirectly lost: 0 bytes in 0 blocks
==6285==      possibly lost: 0 bytes in 0 blocks
==6285==    still reachable: 0 bytes in 0 blocks
==6285==         suppressed: 0 bytes in 0 blocks
==6285== 
==6285== For counts of detected and suppressed errors, rerun with: -v
==6285== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)

发现上面报的错很明显。很好用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九霄的爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值