24

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

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

4

2 回答 2

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 之后立即传入参数

于 2012-03-13T07:26:31.773 回答
1

我也遇到了这个问题。在我的情况下,我在 windows 中编辑“val.sh”并 adb 将其推送到模拟器,但 shell 脚本无法正确执行。然后我使用 echo " * " > val.sh 样式来制作 "val.sh" 并且效果很好。

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

于 2013-06-03T17:06:26.613 回答