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
你必须创build一个脚本,让我们称之为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
关于如何构buildAndroid的Valgrind(ARM)请参阅我的脚本从这里: https : //stackoverflow.com/a/19255251/313113
1)我曾经使用以下脚本来生成Inst文件夹Android valgrind生成失败
2)我正在做的错误是我没有给任何MemCheck工具下的所有文件夹的权限下lib / valgrind。
我的发现将所有生成文件夹(bin,share,inclide,lib)文件夹复制到/ data / local / Inst遍历每个文件夹并将权限设置为CHMOD 777 *
面临的问题像Memcheck工具没有find的ARM-Linux,如果我didnot复制所有这些文件夹1文件夹/ Inst面临memcheck权限,如果不设置权限chmod 777到所有在Hirearchy中的文件夹