perf显示函数名过长被截断,如何获取完整函数名?
获取perf截断的完整函数名的方法
遇到过类似的perf函数名截断问题,给你几个实用的办法来拿到完整的函数签名:
调整perf报告的输出宽度
默认情况下perf会限制输出的列宽,导致长函数名被截断。你可以通过指定--width参数来扩大显示宽度,比如:perf report --width 200数值可以根据实际情况调整,足够大的话就能显示完整的函数名了。
使用perf script导出完整调用栈
perf script命令会输出未经过格式化的原始采样数据,其中的函数名不会被截断。你可以直接查看或者结合grep过滤目标片段:perf script | grep "std::__detail::_Map_base"这样就能看到完整的模板参数和函数名了。
用addr2line解析函数地址
如果perf报告里能看到该函数的内存地址,你可以借助addr2line工具(需要程序编译时带有-g调试信息)来解析完整函数名和源码位置:addr2line -e /path/to/your/executable <function_address>这个方法还能帮你定位到具体的代码行,方便进一步分析。
确保编译时保留完整符号
检查你的编译选项,避免使用-s或者strip命令剥离调试符号,同时建议加上-g生成调试信息,这样perf才能更准确地解析和显示函数名。
另外,从你给出的截断片段来看,这个函数大概率是std::equal_to<piece>相关的map内部比较函数,或者是map的find、insert等操作对应的底层方法,拿到完整函数名后就能对应到父函数里的具体map操作了。
内容的提问来源于stack exchange,提问作者Max Matti
相关产品推荐
相关产品推荐

