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