web-dev-qa-db-ja.com

valgrindでAndroidアプリを起動する方法

私は先週、この質問に対する答えを見つけようとして探していました。

Androidアプリをvalgrindで起動するにはどうすればよいですか? 'am'コマンドでアプリを起動できることはわかっていますが、アプリが起動して終了します。

ネイティブCコードにNDKを使用するアプリを作成していますが、メモリエラーの疑いがあるかどうかを確認する必要があります。

編集:

もう少し学びました。シェルスクリプトを使用してアプリを「ラップ」できます。

これが私が使用しているシェルスクリプトです:

#!/system/bin/sh
VGPARAMS='--error-limit=no'
export TMPDIR=/data/data/com.starlon.froyvisuals
exec /data/local/Inst/bin/valgrind $VGPARAMS $*

そしてここにsetpropがあります:

adb Shell setprop wrap.com.starlon.froyvisuals "logwrapper valgrind"

そして、これが私がアプリを起動する方法です:

adb Shell am start -n com.starlon.froyvisuals/.FroyVisuals

シェルスクリプトがどこに収まるのかわからず、logcatに何も表示されないため、これは正しくないと思います。ヒントはありますか?

Edit2:ああ、シェルスクリプトは上記の「setprop」コマンドで示されています。そう

adb Shell setprop wrap.com.starlon.froyvisuals "logwrapper /data/local/val.sh"

Logcatにはまだ何も表示されていません。

24
Scott

最初にlogcatをクリアしてみてください

Prompt# adb logcat -c
Prompt# adb logcat

アプリケーションをトリガーすると、受信するログを確認できるはずです。

am start -a Android.intent.action.MAIN -n com.example.hellojni/.HelloJni

シェルスクリプトに問題があり、代わりにこれを使用しました。

adb Shell setprop wrap.com.example.hellojni "logwrapper /data/local/Inst/bin/valgrind"

Valgrindの直後にパラメーターを渡すことができるはずです

6
jernkuan

私もこの問題に遭遇しました。私の状況では、windows&adbで「val.sh」を編集します。エミュレータにプッシュしますが、シェルスクリプトを正しく実行できませんでした。次に、echo "*"> val.shスタイルを使用して "val.sh"を作成すると、うまく機能します。

したがって、最初に「val.sh」が正しく解釈されることを確認する必要があります。

1
victor