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

perf report function names and extra characters

我使用 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 是什么?这些是什么意思?他们来自哪里?

这些(C++ 函数)名称被破坏了。查看 name mangling 了解语法细节。这允许对复杂的 C++ 命名进行编码。

关于您的 perf 报告,有一些选项可以要求 demangling:--demangle 理论上默认设置,但实际实施可能取决于 perf 版本或您的 CPU 架构。

perf 可能是在您的系统上不支持 demangling 的情况下构建的。

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