如何用valgrind启动一个android应用程序

我一直在寻找上个星期试图find这个问题的答案。

如何使用valgrind启动Android应用程序? 我知道我可以用'am'命令启动一个应用程序,但它启动应用程序并退出。

我正在编写一个应用程序,它使用本机C代码的NDK,我需要检查它是否有可疑的内存错误。

编辑:

我学到了更多。 你可以用一个shell脚本“包装”一个应用程序。

这里是我使用的shell脚本:

#!/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 

我不认为这是正确的,因为我不知道shell脚本适合在哪里,我没有看到任何logcat。 任何提示?

编辑2:哦,shell脚本用上面的“setprop”命令表示。 所以

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

我仍然没有看到任何logcat。

Solutions Collecting From Web of "如何用valgrind启动一个android应用程序"

您可以尝试先清除logcat

 prompt# adb logcat -c prompt# adb logcat 

触发应用程序后,您应该能够看到日志。

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

我有我的shell脚本的问题,我用这个来代替。

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

您应该能够在valgrind之后立即传入参数

我也遇到过这个问题。 在我的情况下,我编辑Windows和ADB中的“val.sh”推送到模拟器,但shell脚本不能正确执行。 然后我使用回声“ * ”> val.sh风格,使“val.sh”,它运作良好。

所以你应该首先确保“val.sh”可以正确解释。

是的,但你应该使用

adb shell setprop wrap.com.example.hellojni“logwrapper ./data/local/Inst/bin/valgrind”
/ \ —-对于shell(。)很重要!!!

另外如果你想使用一些valgrind工具的configuration – 使用这个:

adb shell setprop wrap.com.example.hellojni“logwrapper ./data/local/Inst/bin/valgrind –tool = massif(… configure massif atc …)”