如何用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。

    Related 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 …)”