12

次のように Valgring で Java プログラムを起動しようとしています (adb シェルで):

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
4

2 に答える 2

20

スクリプトを作成する必要があります。それを 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

于 2013-10-07T21:51:14.487 に答える
2

1) 次のスクリプトを使用して Inst フォルダーを生成しました Android valgrind ビルドが失敗しました

2)私が行っていた間違いは、MemCheckツールが lib/valgrind の下にあるinstの下のすべてのフォルダーに書き込み許可を与えていないことです。

私の調査結果 生成された Inst(bin,share,inclide,lib) フォルダーの下にあるすべてのフォルダーを /data/local/Inst にコピーします 各フォルダーをトラバースし、パーミッションを CHMOD 777 に設定します *

これらのフォルダーをすべてコピーしなかった場合、arm-linux の Memcheck ツールが見つからないという問題に直面していました。

于 2014-04-19T03:24:44.853 に答える