如何使用valgrind启动Android应用程序

时间:2012-02-03 03:00:14

标签: android android-ndk valgrind gdbserver

我一直在寻找上周试图找到这个问题的答案。

如何使用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中看到任何东西。

3 个答案:

答案 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. ...)“