2025年6月29日,周日下午
gprof 是 GNU性能分析工具(GNU Profiler),主要用于分析C/C++等程序的性能瓶颈,通过统计函数调用次数、执行时间及调用关系,帮助开发者优化代码效率。以下是其核心要点:
1. 功能与特点
-
Flat Profile(平坦剖析)
显示每个函数的执行时间占比、调用次数等,例如:
% time:函数耗时占总时间的百分比self seconds:函数自身执行时间(不含子函数)
-
Call Graph(调用图)
展示函数间的调用层次关系及时间分配,例如:
children time:子函数消耗的时间called:调用次数及来源
-
源码注释(可选)
标记每行代码的执行次数(需配合-g编译选项)
2. 工作原理
- 插桩技术:
编译时通过-pg选项,GCC会在每个函数中插入mcount函数,记录调用次数和时间。 - 采样分析:
运行时定期采集程序计数器(PC)值,统计CPU时间分布。 - 生成报告:
程序退出时生成gmon.out文件,通过gprof命令解析为可读报告。
3. 使用步骤
- 编译时加
-pg选项
gcc -pg -o my_program my_program.c
-
运行程序生成数据
./my_program # 生成gmon.out -
生成分析报告
gprof my_program gmon.out > report.txt -
常用参数
-b:简洁输出-p:仅显示Flat Profile-q:仅显示Call Graph
4. 局限性
- 仅支持用户态CPU时间:无法分析内核态或I/O等待时间。
- 多线程支持差:默认仅统计主线程数据。
- 动态库限制:需静态链接库(如
-lc_p)才能分析库函数。

3900

被折叠的 条评论
为什么被折叠?



