【问题标题】:How to start an android app with valgrind如何使用 valgrind 启动一个安卓应用程序
【发布时间】:2012-02-25 17:52:20
【问题描述】:

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

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

【问题讨论】:

标签: android android-ndk valgrind gdbserver


【解决方案1】:

你可以先尝试清除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 之后传入参数

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      相关资源
      最近更新 更多