You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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、符号等信息,适合按需提取字段:

  1. 导出原始调用栈数据:
perf script -g > perf_script_raw.txt
  1. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:46:03