你必须创建一个脚本,我们称之为 start_valgrind.sh
#!/system/bin/sh
PACKAGE="com.example.hellojni"
# Callgrind tool
#VGPARAMS='-v --error-limit=no --trace-children=yes --log-file=/sdcard/valgrind.log.%p --tool=callgrind --callgrind-out-file=/sdcard/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/Inst/bin/valgrind $VGPARAMS $*
应该复制到设备。
一旦您在本地文件系统的某个地方的start_valgrind.sh文件中拥有上述脚本,您就可以使用以下脚本(我们称之为bootstrap_valgrind.sh)来完成所有工作(将 start_valgrind.sh 脚本复制到手机,运行它,通过 Valgrind 启动你的应用程序)。
#!/usr/bin/env bash
PACKAGE="com.example.hellojni"
adb push start_valgrind.sh /data/local/
adb shell chmod 777 /data/local/start_valgrind.sh
adb root
adb shell setprop wrap.$PACKAGE "logwrapper /data/local/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
警告:确保使用 setprop 设置的属性名称,即 (wrap.com.yourcompany.yourapp) 的长度小于 31 个字符。
否则,您将收到错误“无法设置属性”,因为您不能设置长度大于 31 的属性名称,这是属性名称中允许的最大字符数。
此外,属性值应 <= 91 个字符:https ://stackoverflow.com/a/5068818/313113
有关如何为 Android (ARM) 构建 Valgrind,请从此处查看我的脚本:https ://stackoverflow.com/a/19255251/313113