Perf在Android上无法正确显示调用图

时间:2015-09-08 01:22:01

标签: android linux profiling perf

我正在尝试使用perf来分析我的Android应用程序。

fplutil项目的帮助下,我设法在Android设备上安装了perf,在主机上运行perf record然后perf report

通常当我运行perf report -g时,我希望看到与此类似的调用图:

47.91%    a.out  a.out              [.] f5()
          |
          --- f5()
             |
             |--53.82%-- f4()
             |          |
             |          |--56.16%-- f3()
             |          |          |
             |          |          |--49.14%-- f2()
             |          |          |          |
             |          |          |          |--52.92%-- f1()
             |          |          |          |          a()
             |          |          |          |          main
             |          |          |          |          __libc_start_main
             |          |          |          |
             |          |          |           --47.08%-- a()
             |          |          |                     main
             |          |          |                     __libc_start_main

然而,当我对Android设备上收集的数据执行perf report时,我看不到正确的调用图,就像堆栈没有正确展开一样:

4.98%  app_name  my_lib.so  [.] void quat_apply<double>(double*, double const*, double const*, int, double)
            |                                                                                              
            --- 0xbee75fe4                                                                                 

            |                                                                                              
            --- 0xbee760c4                                                                                 

            |                                                                                              
            --- 0xbee75c0c 

如何用函数名替换这些十六进制地址?

我已经使用-g-fno-omit-frame-pointer构建了我的代码,我是否遗漏了其他内容?

1 个答案:

答案 0 :(得分:1)

宾果!

-mapcs-frame
  

生成符合ARM Procedure Call的堆栈帧   所有功能的标准,即使这不是绝对必要的   正确执行代码。使用指定-fomit-frame-pointer   此选项导致不为叶生成堆栈帧   功能。默认值为-mno-apcs-frame。不推荐使用此选项。

虽然选项被标记为已弃用,但它为我修复了调用图。