微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用Valgrind运行Java Android程序

我正试图在Valgring下启动一个 Java程序(在adb shell中):
valgrind am start -a android.intent.action.MAIN -n com.me.myapp/.MainActivity

我越来越:

==2362== Memcheck,a memory error detector
==2362== copyright (C) 2002-2012,and GNU GPL'd,by Julian Seward et al.
==2362== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==2362== Command: am
==2362== 
/system/bin/sh: am: No such file or directory

解决方法

你必须创建一个脚本,让它调用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

关于如何构建Valgrind for Android(ARM),请参阅我的脚本:https://stackoverflow.com/a/19255251/313113

原文地址:https://www.jb51.cc/android/123052.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐