perf报告函数名称和额外字符

时间:2015-09-09 00:03:18

标签: profiling perf

我使用perf描述了一个应用程序,我很困惑为什么报告中的函数名称如此错误。例如,以下是perf report

的输出
# Overhead      Command      Shared Object                                                                                                 
# ........  ...........  .................  .................................................................................................................................................................................................
#
    38.98%  hello_sp_tp  libc-2.19.so       [.] __memcpy_sse2_unaligned                                                                                                                                                                      
            |
            --- __memcpy_sse2_unaligned
               |          
               |--21.70%-- _ZN5nupic10algorithms6Cells46CStateaSERKS2_.local.1629
               |          
                --17.28%-- _ZN5nupic10algorithms6Cells46Cells420updateInferenceStateERKSt6vectorIjSaIjEE
                          _ZN5nupic10algorithms6Cells46Cells47computeEPfS3_bb

例如,我认识到名称nupic.algorithms.Cells4.updateInferenceState(),但我不确定填充名称的所有其他字符是什么意思。

什么是_ZN5?这个函数名末尾的IjSaIjEE是什么?这些是什么意思?它们来自哪里?

2 个答案:

答案 0 :(得分:1)

这些(C ++函数)名称被破坏了。查看name mangling以获取语法详细信息。这允许编码复杂的C ++命名。

关于你的性能报告,有一些选项要求解码:--demangle理论上默认设置,但实际实现可能取决于性能版本或CPU架构。

答案 1 :(得分:0)

perf可能是在不支持对系统进行解码的情况下构建的。

如果您的系统是Ubuntu,请看这里: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1396654 和解决方法在这里提供: perf enable demangling of callgraph