如何在Linux perf调用图中获取DSO信息并导出用于分析
导出带DSO信息的perf调用图数据方法
方法1:用perf report直接输出带DSO的文本到文件
使用--stdio绕过TUI界面,配合--show-dso强制显示每个符号所属的DSO,直接重定向到文件:
perf report -g flat,0.5,callee,function,percent --show-dso --stdio > perf_callgraph_with_dso.txt
输出文本中每个符号会附带[DSO名称]后缀,比如__libc_start_main [libc.so.6],方便后续解析。
方法2:用perf script导出原始数据后自定义解析
perf script会输出更详细的调用栈原始数据,包含进程、线程、DSO、符号等信息,适合按需提取字段:
- 导出原始调用栈数据:
perf script -g > perf_script_raw.txt
- 用awk提取目标二进制(BubbleSort1)调用的库函数及对应DSO,输出为CSV格式:
awk ' /BubbleSort1/ { current_bin = $1 } /^\s+/ { if (current_bin == "BubbleSort1") { print current_bin "," $4 "," $6 } }' perf_script_raw.txt > callgraph_dso.csv
该脚本会提取BubbleSort1发起的调用栈中,被调用函数($4)和所属DSO($6),生成的CSV可直接用pandas加载分析。
方法3:直接导出CSV格式(需perf版本≥5.10)
若你的perf版本足够新(≥5.10),可使用--csv选项直接导出包含DSO的结构化CSV:
perf report -g flat,0.5,callee,function,percent --show-dso --csv > perf_callgraph.csv
导出的CSV会包含独立的DSO列,直接执行pandas.read_csv("perf_callgraph.csv")即可加载分析。
注意事项
- 确保
BubbleSort1和依赖库有完整符号信息,否则DSO可能显示为[unknown],可通过安装对应库的调试包或检查二进制符号表解决。 - 若DSO识别异常,执行
perf buildid-cache -a ./BubbleSort1将二进制的build-id加入缓存,提升符号解析准确性。
内容的提问来源于stack exchange,提问作者xiaoyu he
相关产品推荐
相关产品推荐

