记录一下主要步骤:
1. 编译valgrind, 我的编译环境:Ubuntu 12.10 x86-64, android ndk r8,
目标android设备的os是android 4.0
下载valgrind 3.8.1, 包含README.android, 按步骤执行,我没有遇到问题,下面是根据的设备作的脚本:
export NDKROOT=~/Tools/android/android-ndk-r8/
export AR=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar
export LD=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ld
export CC=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
export HWKIND=generic
CPPFLAGS="--sysroot=$NDKROOT/platforms/android-14/arch-arm -DANDROID_HARDWARE_$HWKIND" \
CFLAGS="--sysroot=$NDKROOT/platforms/android-14/arch-arm" \
./configure --prefix=/data/local/Inst \
--host=armv7-unknown-linux --target=armv7-unknown-linux \
--with-tmpdir=/sdcard
make -j2
make -j2 install DESTDIR=`pwd`/Inst
2. 安装valgrind到anddroid设备:
adb push Inst /
注意是'/' 而不是'/data/local/' 看一个Inst下生成的东西就明白的
3. 使valgrind的输出重定向到logcat
#!/system/bin/sh
VGPARAMS='--error-limit=no'
export TMPDIR=/data/data/app_path
exec /data/local/Inst/bin/valgrind $VGPARAMS $*
以上脚本随意命名,如“val.sh", adb push val.sh /data/local 并增加可执行的权限
用logwrapper来重定向
adb shell setprop wrap.your_package "logwrapper /data/local/val.sh"
4. 启动app
如果已经运行, 必须先关闭
然后用am启动, am start -a android.intent.action.MAIN -n your_package/.HomeActivity
此时会调用3中的脚本。
运行非常慢, 有待进一步的解决。
参考:
1. http://blog.mozilla.org/jseward/2011/09/27/valgrind-on-android-current-status/
2. http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/