编译环境: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的过程与注意事项的更多相关文章

  1. ubuntu 上使用valgrind

    Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的ma ...

  2. 在Ubuntu 14.04 TLS下openvas V8.0源代码安装过程

    [Qboy原创]详细记录源代码的安装过程 1.下载原代码 在http://www.openvas.org/install-source.html下载 Libraries 8.0.8 Scanner 5 ...

  3. 使用 VirtualBox 虚拟机在电脑上运行 Android 4.0 系统,让电脑瞬间变安卓平板

    Ref: http://www.iplaysoft.com/android-v4-ics-for-virtualbox.html 随着 Android 手机的各种软件应用越来越多,很多没有购买的朋友都 ...

  4. AppCompat v21 — Android 5.0之前版本设备的Material Design实现

    博客原文地址:http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html,要想打 ...

  5. Android 4.0 ICS SystemUI浅析——StatusBar结构分析

    Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsi ...

  6. 《Thinking in Android 9.0 系统开发源码钻研录》

    最近打算把个人站点的博客文章同步到"博客园"! Thinking in Android -- "系统启动" [启动阶段] [相关文章] 状态 源码版本 init ...

  7. java项目 在 linux ubuntu 上的部署相关

    --------------------JDK在linux ubuntu上的安装------------------------------------------------------------ ...

  8. Android 5.0以上Material Design 沉浸式状态栏

    偶然在知乎上看到这个问题,Android 5.0 如何实现将布局的内容延伸到状态栏,之前也见过多个应用的这个功能,但是知乎上的答案却没有一个真正实现此功能的一类是把标题栏设置App主题颜色,一类是提取 ...

  9. Android 4.0 x86安装教程 附带联网参数详细设置

    Android 4.0 x86是一个可以支持在电脑上运行的Android 4.0系统.没有手机一样也可以体验Android 4.0.这对玩机爱好者们来说也算得上是一个不大不小的好消息.不过目前的And ...

随机推荐

  1. 005-spring cache-配置缓存存储

    一.概述 缓存抽象提供了多种存储集成.要使用它们,需要简单地声明一个适当的CacheManager - 一个控制和管理Caches的实体,可用于检索这些实体以进行存储. 1.1.基于JDK Concu ...

  2. [World Wind学习]22.相机高度和瓦片等级计算

    在这里我们看到判断Lod的级别主要有三个条件: * 1.相机视角范围,视角范围越大,所包含的tileSize就越大 * 2.相机与瓦片距离,距离越远,所包含的tileSize也就越大 * 3.相机视锥 ...

  3. Selenium之Chrome浏览器的启动

    1.下载Chromedriver.exe文件放至需要的目录中: 2.编写代码 import org.openqa.selenium.WebDriver; import org.openqa.selen ...

  4. lua关于参数生命周期的研究

    local num = 123 local str = "abc" local tb ={} 数字和字符串类型的值作为参数传递的时候,是复制值,2个独立的内存地址 table类型的 ...

  5. SQL case when 多条件查询

    基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后.下面给个简单示例:

  6. web实现负载均衡的几种实现方式

    摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应用是Web负载均衡.根据实现的 ...

  7. Python3.x:简单时间调度Timer(间隔时间执行)

    Python3.x:简单时间调度Timer(间隔时间执行) threading模块中的Timer能够帮助实现定时任务,而且是非阻塞的: 代码: import threading import time ...

  8. presto-cli通过hive查询hdfs

    1.  启动hive metastore 2. 启动hive thrift接口 参考:http://www.cnblogs.com/kisf/p/7497261.html 3. 下载presto se ...

  9. [UI基础][不会说话的汤姆猫]

    会说话的汤姆猫这个APP层级风靡一时,其UI部分就是利用了序列动画的技术, 接下来 我们用汤姆猫来演示怎么制作序列动画. [要求]: 1.学会使用序列动画的方法 2.学会分析动画播放中内存占用高的问题 ...

  10. 如何解决ubuntu报的错误:You must put some 'source' URIs in your sources.list

    答:添加deb-src开头的源,如 deb-src http://cn.archive.ubuntu.com/ubuntu/ bionic-updates multiverse