安卓:有没有用于分析本地代码的工具?

22

我只找到了一个分析工具 - http://code.google.com/p/android-ndk-profiler/。目前还无法使用,因此想知道是否有其他可用的工具。 我需要在物理设备上进行分析,因为我的应用程序甚至无法在模拟器上运行。

4个回答

8

让Android-NDK profiler工作并不容易。您需要彻底按照这里的步骤进行操作。

以下是导致我成功的一些提示:

  • 确保您的android.mk文件正确,并且正确导出NDK_MODULE_PATH。
  • 正确使用以下函数

    monstartup("your_lib.so");

    moncleanup();

  • 如果现在生成了gmon.out,则需要从设备中提取它,但不要将其提取到PC的任何位置。对我来说,只有当我进入应用程序的文件夹(其中包含jni、obj、res和其他文件夹)时才能正常工作,然后执行以下操作:

    console$ adb pull sdcard/gmon.out

  • 然后运行gprof。尝试使用NDK工具链中的所有版本。对我来说,只有其中一个可行,就是这个:

    console$ ~/Libraries/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gprof obj/local/armeabi-v7a/libxxxx.so > profile.txt


不幸的是,android-ndk-profiler已经停止开发,并且开发者因为Android和/或设备对数据传输设置限制(导致分析器跟踪保存速度极慢)而感到沮丧。 - Top-Master
但是 shiny-profiler 似乎也已经停止更新了,如果我必须选择哪一个来重新启动,我会选择 android-ndk-profiler,因为 android-ndk-profiler 使用 GCC 技巧自动在每个函数的开头运行其代码(而 shiny-profiler 需要手动向每个函数添加宏)。 - Top-Master

8

Shiny profiler是跨平台的,可以在任何地方运行,并且除了标准的C++编译器外没有其他依赖项。在简单使用时,您只需要在所有函数和方法(或至少要进行分析的函数和方法)的开头添加一个宏即可。


3
修改项目中的每个函数都很痛苦。我更喜欢自动仪器化。但还是谢谢你的建议! - Violet Giraffe
3
如果别的方法都不行,我保证Shiny会生效。我曾经在webOS上遇到类似的问题,gprof支持出了问题,没有别的可用方案。幸好Shiny表现很好,帮助我解决了性能问题。为了让代码支持instrumentation,我写了一个脚本,使用正则表达式定位了所有函数体,并自动插入了宏调用,所以一点也不痛苦。祝你找到合适的方案,好运! - Miguel Grinberg
有道理!我的意思是自动宏插入。谢谢! - Violet Giraffe
有没有文档或使用示例? - Aleksei Petrenko
似乎 shiny-profiler 已经停止维护了,但是它需要在每个函数的开头使用一个宏,而 android-ndk-profiler 利用 GCC 的技巧自动运行代码以在每个函数的开头执行。 - Top-Master

2

终于开始针对Android了。但是他们支持ARM还是只支持x86? - Violet Giraffe
你好Ilya! :) 它实际上比android-ndk-profiler更好吗?它的价格是多少? - Aleksei Petrenko
据我所知,android-ndk-profiler需要将您的代码与他们的库链接起来。您可以尝试试用版本。https://software.intel.com/en-us/intel-system-studio - Ilya Kryukov
VTune不支持64位ARM。在我的32位ARM三星设备上,三星安全监视器会跳出并阻止其工作。我一直无法从VTune为Android运行配置文件。 - Bram

1
在NDK r13b中有一个新工具称为simpleperf

Simpleperf 的文档位于 https://android.googlesource.com/platform/system/extras/+/master/simpleperf/README.md。 - osgx

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