0x00 背景
略
//下面的方法程序会crash。。。
0x01 方法
- 下载googlesamples并编译安装
hello-jni
到android作为目标程序。 -
下载valdroid并push到手机的
/data/local/valdroid/
目录里。 -
创建这两个脚本,并执行
sh bootstrap_valgrind.sh
//bootstrap_valgrind.sh#!/usr/bin/env bash PACKAGE="com.example.hellojni" adb push start_valgrind.sh /data/local/valdroid adb shell su -c "chmod 777 /data/local/valdroid/start_valgrind.sh" adb shell su -c "setprop wrap.$PACKAGE 'logwrapper /data/local/valdroid/start_valgrind.sh'" echo "wrap.$PACKAGE: $(adb shell getprop wrap.$PACKAGE)" adb shell am force-stop $PACKAGE adb shell am start -a android.intent.action.MAIN -n $PACKAGE/.HelloJni adb logcat -c adb logcat exit 0
//start_valgrind.sh
#!/system/bin/sh PACKAGE="com.example.hellojni" # Callgrind tool VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/data/local/valdroid/valgrind.log.%p --tool=callgrind --callgrind-out-file=/data/local/valdroid/callgrind.out.%p' # Memcheck tool # VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=memcheck --leak-check=full --show-reachable=yes' export TMPDIR=/data/data/$PACKAGE exec /data/local/valdroid/bin/valgrind $VGPARAMS $*
-
在
/data/local/valdroid/
就可以看到valgrind.out.xxxx
和callgrind.out.xxx
这两个log文件了。