prof 命令
prof 命令显示指定程序的每个外部符号或例程的 CPU 使用率概要文件。
详细信息将显示以下内容:
- 该符号的地址与下一个符号的地址之间的执行时间百分比
- 调用该函数的次数
- 每个调用的平均毫秒数
prof 命令解释 monitor () 子例程为对象文件 (缺省情况下为a.out ) 收集的概要文件数据,读取对象文件中的符号表,并将其与 monitor () 子例程生成的概要文件 (缺省情况下为mon.out ) 相关联。 使用情况报告将发送到终端,或者可以重定向到文件。
要使用 prof 命令,请使用 -p 选项来编译 C、FORTRAN 或 COBOL. 格式的源程序。 这会将特殊概要分析启动函数插入到调用 monitor () 子例程以跟踪函数调用的对象文件中。 当程序执行时 ,monitor() 子程序会创建一个 mon.out 文件来追踪执行时间。 因此,只有程序从主程序显式退出或返回时才产生 mon.out 文件。 此外, -p 标志使编译器将对 mcount () 子例程的调用插入到为程序的每个重新编译的函数生成的对象代码中。 当程序运行时,每当父代调用子函数时,子代就会调用 mcount () 子例程来增加该父子对的不同计数器。 这将计算对函数的调用数。
注: 不能使用 prof 命令对优化代码进行概要分析。
缺省情况下,显示的报告按 CPU 时间百分比递减排序。 这与指定 -t 选项时相同。
-c 选项通过减少调用数进行排序,而 -n 选项按符号名称的字母顺序进行排序。
如果使用 -s 选项,那么将生成摘要文件 mon.sum 。 当使用 -m 选项指定多个概要文件时 ( -m 选项指定包含监视器数据的文件) ,这很有用。
-z 选项包含所有符号,即使有零个调用和时间关联也是如此。
文件参考》中的prof命令解释了其他可用选项。
以下示例显示了修改版本的 Whetstone benchmark (Double Precision) 程序的 prof 命令输出的第一部分。
# cc -o cwhet -p -lm cwhet.c
# cwhet > cwhet.out
# prof
Name %Time Seconds Cumsecs #Calls msec/call
.main 32.6 17.63 17.63 1 17630.
.__mcount 28.2 15.25 32.88
.mod8 16.3 8.82 41.70 8990000 0.0010
.mod9 9.9 5.38 47.08 6160000 0.0009
.cos 2.9 1.57 48.65 1920000 0.0008
.exp 2.4 1.32 49.97 930000 0.0014
.log 2.4 1.31 51.28 930000 0.0014
.mod3 1.9 1.01 52.29 140000 0.0072
.sin 1.2 0.63 52.92 640000 0.0010
.sqrt 1.1 0.59 53.51
.atan 1.1 0.57 54.08 640000 0.0009
.pout 0.0 0.00 54.08 10 0.0
.exit 0.0 0.00 54.08 1 0.
.free 0.0 0.00 54.08 2 0.
.free_y 0.0 0.00 54.08 2 0.在此示例中,我们看到对 mod8() 和 mod9() 例程的许多调用。 作为起点,检查源代码以了解它们为何被这么多使用。 另一个起点可能是调查例程需要这么多时间的原因。
注: 如果要监视的程序使用 fork () 系统调用,请注意父代和子代创建相同的文件 (mon.out)。 要避免此问题,请更改子进程的当前目录。