Ubuntu上交叉编译valgrind for Android 4.0.4的过程与注意事项

摘要:
“valgrind:无法启动工具'emcheck'平台'arm-linux':无文件或目录”exportVALGRIND_LIB=/data/local/valgrind/LIB/valgrind/2。在Android 4.0.4 127下执行Memcheck |shell@android:/data/local#/data/local/valgrind/bin/valgrindls==3509==Memcheck,amemoryerordetector==3509==版权所有2002-2012,和GNUGPL'd,由JulianServetal提供。==3509==使用Valgrind-3.8.1和LibVEX;reunwith hforcopyrightnfo==3509==命令:ls==3509===--3509--警告:读取调试信息时出现严重错误--3509--当从/data/local/valgrind/lib/valgrind/vgpreload_ core arm linux读取调试信息。所以:--3509—无法感知。datasectionmappingtesttmp==3509==3509==HEAPSUMMARY:==3509==inseatsexit:4096字节1块==3509===总堆使用:5个字节,4个树,8337bytesallocated==3509===3509==泄漏汇总:==3509==明确丢失:0字节0块==3509+=间接丢失:0个字节0块===3509===可能最多:0字节1块==350 9==仍然可访问:4096bytesin1块===3509===已抑制:0字节2块===350 9===重新展开--泄漏检查=泄漏内存的全部展开==3509-==3509-1==强制检测到的字节数和阻止的字节数,重新展开:-v==3509==错误汇总:0errorsfrom0contextsshell@android:/data/local#3。在Android 4.0.4/data/local/valgrind/bin/valgrind--tool=callgrind/测试执行后,在目录中生成“callgrind.out.XXX”作为分析文件,可以直接使用:/data/loal/valgrind/biin/callgrind_Annotatecallgrind.oout.XXX打印结果;您也可以在Ubuntu上使用gprof2dot.py-callgrindcallgrind.out.XXX|dot-Tpng-oreport.png生成图形结果。
编译环境:Ubuntu x86_64(Linux root 2.6.32-45-generic #101-Ubuntu SMP Mon Dec 3 15:39:38 UTC 2012 x86_64 GNU/Linux)
运行环境:Android 4.0.4 (Linux kernel 3.0.21 OMAP4460)

一、下载NDK9和valgrind 3.8.1。

二、按照valgrind 3.8.1中的README.android进行编译,步骤如下:
1. 指定NDK根目录
export NDKROOT=/path/to/android-ndk-r9

2. 指定通用的安卓设备
export HWKIND=generic

3. 指定交叉工具链路径
export AR=$NDKROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
export LD=$NDKROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
export CC=$NDKROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

4. 到valgrind目录下配置valgrind
cd /path/to/valgrind
CPPFLAGS="--sysroot=$NDKROOT/platforms/android-3/arch-arm -DANDROID_HARDWARE_$HWKIND"
CFLAGS="--sysroot=$NDKROOT/platforms/android-3/arch-arm"
 ./configure --prefix=/data/local/valgrind --host=armv7-unknown-linux --target=armv7-unknown-linux  --with-tmpdir=/sdcard
注:配置这步经常报错,前面的路径等设置需要细心啊。

5. 编译并安装到指定路径
make -j2
make -j2 install DESTDIR=`pwd`/Inst
注:-j2表示利用双核提升编译速度,对速度不在乎的可以去掉。

三、安卓上运行
1. 拷贝Inst到安卓系统/data/local/valgrind中。
注:假如路径不是编译配置时的路径,这时需要重新设置一下,否则会报错。“valgrind: failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory
export VALGRIND_LIB=/data/local/valgrind/lib/valgrind/

2. 安卓4.0.4下(OMAP4460)执行Memcheck效果
127|shell@android:/data/local # /data/local/valgrind/bin/valgrind ls                  
==3509== Memcheck, a memory error detector
==3509== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==3509== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==3509== Command: ls
==3509==
--3509-- WARNING: Serious error when reading debug info
--3509-- When reading debug info from /data/local/valgrind/lib/valgrind/vgpreload_core-arm-linux.so:
--3509-- Can't make sense of .data section mapping
test
tmp

==3509==
==3509== HEAP SUMMARY:
==3509==     in use at exit: 4,096 bytes in 1 blocks
==3509==   total heap usage: 5 allocs, 4 frees, 8,337 bytes allocated
==3509==
==3509== LEAK SUMMARY:
==3509==    definitely lost: 0 bytes in 0 blocks
==3509==    indirectly lost: 0 bytes in 0 blocks
==3509==      possibly lost: 0 bytes in 0 blocks
==3509==    still reachable: 4,096 bytes in 1 blocks
==3509==         suppressed: 0 bytes in 0 blocks
==3509== Rerun with --leak-check=full to see details of leaked memory
==3509==
==3509== For counts of detected and suppressed errors, rerun with: -v
==3509== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
shell@android:/data/local # 

3. 安卓4.0.4下(OMAP4460)执行callgrind步骤
/data/local/valgrind/bin/valgrind --tool=callgrind ./test
执行完成后在目录下生成"callgrind.out.XXX"(XXX是进程ID号)是分析文件,可以直接利用:/data/local/valgrind/bin/callgrind_annotate callgrind.out.XXX 打印结果;
也可以在Ubuntu上使用:gprof2dot.py -f callgrind callgrind.out.XXX |dot -Tpng -o report.png 来生成图形化结果(需下载gprof2dot.py脚本,详见参考资料3)。
注:
1、使用callgrind时,./test程序运行时间短(<2s),运算量小的可以正常执行callgrind;而当test程序运行时间较长(>6S),运算量较大时,会导致安卓系统不稳定,无法正确执行下去,估计valgrind对安卓的兼容性较差吧。


参考资料:
1. http://blog.csdn.net/21cnbao/article/details/7399863    宋宝华 使用valgrind检测Android native程序的内存
2. http://blog.csdn.net/gxh9314/article/details/8447559    mips 交叉编译valgrind
3. http://blog.csdn.net/yanghao23/article/details/7514587 linux下利用valgrind工具进行内存泄露检测和性能分析

免责声明:文章转载自《Ubuntu上交叉编译valgrind for Android 4.0.4的过程与注意事项》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用DataBindings属性绑定控件的值a标签 target="_blank" 需要注意这些下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CDH localhost:7180 页面无法打开

有时会遇到CDH集群的7180页面无法访问,通过命令查看服务发现: 1 service --status-all 2 cloudera-scm-server dead but pid file exists 删除pid文件:  1 rm -rf /var/run/cloudera-scm-server   然后启动服务cloudera-scm-serv...

ubuntu下配置java环境【转】

转自:http://www.cnblogs.com/fnng/archive/2013/01/30/2883815.html 配置JDK环境 下载 登录oracle的网站去下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html...

查看linux中swap内存的相关参数

内容主要来源于:linux的内存回收和交换 各项命令查看的linux环境是:Linux SUSE-33 2.6.32.12-0.7-defaul zone? 内存管理的相关逻辑都是以zone为单位的,这里zone的含义是指内存的分区管理。Linux将内存分成多个区,主要有直接访问区(DMA)、一般区(Normal)和高端内存区(HighMemory)。内核...

linux下安装composer以及使用composer安装laravel

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nianzhi1202/article/details/72770099 一.安装composer之前首先要确定您的机器上已经安装了php,并可以通过php来执行命令。使用php –v 测试 当然要直接使用php 还需确定php命令已经设置在全局命令中,否...

TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个

1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android.content.Context;import android.content.res.TypedArray;import android.graphics....

linux如何挂载windows下的共享文件

说明:windows下有一共享文件夹APP,windows本地ip是192.168.9.155现在需要在linux服务器上挂载这个APP文件夹,linux服务器ip是192.168.9.200 操作记录如下: 1)windows上的准备工作 首先将windows上D盘下的APP文件夹设置为共享。右击APP文件夹的“共享”属性. 选择“特定用户”共享,添加...