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

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中也没有看到任何有关它的信息。你有什么提示吗?

编辑2: 哦,上面使用了“setprop”命令指示Shell脚本。所以

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

我仍然没有在logcat中看到任何内容。


1
如何通过Valgrind运行您的应用程序,请参考我的脚本:https://dev59.com/jWYr5IYBdhLWcg3wn7cc#19235439。 - Alex Bitek
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之后传递参数。

1
我也遇到了这个问题。在我的情况下,我在Windows上编辑了"val.sh"并将其推送到模拟器中,但是shell脚本无法正确执行。然后我使用了echo "*" > val.sh样式来制作"val.sh",它可以正常工作。
因此,您应该首先确保"val.sh"可以被正确解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接