我在perf script的输出中注意到了未分离的函数,最初我认为perf可能做错了什么。
但是,通过更深入地研究一些*.so文件,我已经能够用c++filt -t、nm -C和objdump -D -C重现这个问题。
我有点迷茫,不知道在设计过程中可能出了什么问题。
其中一个没有去角度的符号是:
_ZZNK5Gaudi10Functional7details16MultiTransformerIFSt5tupleIJSt6vectorIN4LHCb14VPLightClusterESaIS6_EESt5arrayIjLm53EEEERK12EventContextRKNS5_8RawEventERK4DeVPENS0_6Traits4use_IJNS5_7DetDesc21useConditionHandleForIJSI_EEENSM_11BaseClass_tINSO_23ConditionAccessorHolderI10FixTESPathINS_9AlgorithmEEEEEEEEELb0EE7executeESE_ENKUlDpRT_E_clIJK21DataObjectWriteHandleIS8_S8_EKS15_ISA_SA_EEEEDaS12_该库是用GCC 10.1编译的。但是如果我用clang 11编译,我可以在objdump -D -C中找到相同的符号。
我现在有点走进了死胡同,所以任何关于我可以检查的建议都会非常感谢。:)
发布于 2021-10-20 06:29:36
通过使用评论中建议的工具解决。
llvm-cxxfilt也可以工作,并且可能已经在某些计算机上可用。
c++filt、nm、perf和objdump使用的功能是在libiberty中实现的,而libiberty是GCC的一部分。因此,我在这里提交了一个错误报告:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102851
https://stackoverflow.com/questions/69598507
复制相似问题