gprof输出内容示例
Each sample counts as 0.01 seconds
.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
81.13 0.43 0.43 11 39.09 39.09 fun_2()
18.87 0.53 0.10 11 9.09 9.09 fun_1()
0.00 0.53 0.00 1 0.00 530.00 fun_3()
self ms/call : 函数自身,不带子函数,每次call消耗时间, ms单位:ms/call
calls : 函数在程序生命期内的总的调用次数。(注!递归调用不计数;多次递归调用的时间算在单次的调用时间里面)
self seconds : 函数自身,不带子函数,程序生命周期中全部call消耗时间,秒单位;= (self ms/call) * calls / 1000
% time : 以%形式展示 self seconds 列;
total ms/call : 函数自身,带子函数,每次call消耗时间, ms单位:ms/call
gprof手册
英文: http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html
中文: http://hi.baidu.com/daisycheung/blog/item/72c0f9276465690f908f9df2.html
怎么产生gmon.out文件?
编译程序是加上 -pg 参数, 然后, 程序正常退出时会产生gmon.out
举例:g++ -Wall -g -pg 1.cpp -o 1
怎么分析gmon.out
举例:gprof 进程名 gmon.out
常用的gprof命 令选项:
-b 不再输出统计图表中每个字段的详细描述。
-p 只 输出函数的调用图(Call graph的那部分信息)。
-q 只输出函数的时间消耗列表。
-e Name 不 再输出函数Name 及其子函数的调用图(除非它们有未被限制的其它父函数)。可以给定多个 -e 标志。一个 -e 标志只能指定一个函数。
-E Name 不再输出函数Name 及其子函数的调用图,此标志类似 于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。
-f Name 输 出函数Name 及其子函数的调用图。可以指定多个 -f 标志。一个 -f 标志只能指定一个函数。
-F Name 输出 函数Name 及其子函数的调用图,它类似于 -f 标 志,但它在总时间和百分比时间计算中仅使用所打印的例程的时间。可以指定多个 -F 标志。一个 -F 标志只能指定一个函数。-F 标志覆盖 -E 标志。
-z 显示使用次数为零的例程(按照调用计数和累积时间计算)。