用于本机可执行文件的 Android NDK 分析器不生成数据

Posted

技术标签:

【中文标题】用于本机可执行文件的 Android NDK 分析器不生成数据【英文标题】:Android NDK profiler for native executable produces no data 【发布时间】:2015-03-01 04:30:38 【问题描述】:

我正在使用 android NDK 通过include $(BUILD_EXECUTABLE) 构建本机 C/C++ 二进制文件。我已根据他们的说明将 android-ndk-profiler 模块添加到我的 Android.mk 中,并添加了对 monstartupmoncleanup 的调用。

在有根设备上运行二进制文件会生成 gmon.out,并且一切似乎都正常工作。但是运行 $ANDROID_NDK/toolchains/.../arm-linux-androideabi-gprof 会显示标题和描述,但没有实际数据。

我知道探查器旨在用于本机共享库而不是可执行文件,但是否有可能实现这一目标?

【问题讨论】:

【参考方案1】:

可以通过诱使分析器认为您的可执行文件实际上是一个共享库来分析可执行文件。分析器要求您将库名称传递给monstartup,以便它可以查找内存映射信息。如果您将它传递给“your_lib.so”,它将查找名称为“libyour_lib.so”的映射。

所以在你的启动代码中,输入:

monstartup("myexecutable.so");

将二进制文件推送到您的设备并将其重命名为 libmyexecutable.so。然后运行它并享受您的分析数据。

注意:这是使用 NDK r10d 和 android-ndk-profiler 3.3 测试的。

【讨论】:

以上是关于用于本机可执行文件的 Android NDK 分析器不生成数据的主要内容,如果未能解决你的问题,请参考以下文章

Android NDK 创建可执行文件但未将其推送到设备上 (Eclipse)

Android NDK - 在没有Android Studio的情况下构建本机库

NDK编译可执行文件在Android 中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。(示

Android NDK将参数传递给本机方法

转NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办(代

将 Android* x86 NDK 用于 Eclipse* 并移植 NDK 演示样例应用