我一直在寻找上周试图找到这个问题的答案。
如何使用valgrind启动Android应用?我知道我可以使用'am'命令启动应用程序,但它会启动应用程序并退出。
我正在编写一个将NDK用于本机C代码的应用程序,我需要检查它是否存在可疑的内存错误。
编辑:
我已经学到了更多。您可以使用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中没有看到任何内容。任何提示?
EDIT2: 哦,shell脚本用上面的“setprop”命令表示。所以
adb shell setprop wrap.com.starlon.froyvisuals "logwrapper /data/local/val.sh"
我还没有在logcat中看到任何东西。
答案 0 :(得分:6)
您可以尝试先清除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
之后立即传递参数答案 1 :(得分:1)
我也遇到过这个问题。在我的情况下,我编辑windows&中的“val.sh”。 adb将其推送到模拟器,但无法正确执行shell脚本。然后我使用echo“ * ”>使用val.sh样式制作“val.sh”并且效果很好。
所以你应该首先确保正确解释“val.sh”。
答案 2 :(得分:-1)
adb shell setprop wrap.com.example.hellojni“logwrapper ./data/local/Inst/bin/valgrind“
/ \ ----对于shell(。)很重要!!!
如果你想使用valgrind工具的一些配置 - 请使用:
adb shell setprop wrap.com.example.hellojni“logwrapper ./data/local/Inst/bin/valgrind --tool = massif(... configure massif a.t.c. ...)“