显示对象文件概要文件数据。
prof [ -t | -c | -a | -n ] [ -o | -x ] [ -g ] [ -z ] [ -h ] [ -s ] [ -S ] [ -v ] [ -L PathName ] [ Program ] [ -m MonitorData ... ]
prof 命令为对象文件 Program(缺省情况下为 a.out)解释通过 monitor 子例程收集的概要文件数据。 它读取在对象文件 Program 中的符号表并将它与概要文件(缺省情况下为 mon.out)相联系。prof 命令为每个外部文本符号显示花费在该符号地址和下一个符号的地址之间的执行时间的百分比、函数被调用的次数和每个调用的平均毫秒数。
注:来自于 C++ 对象文件的符号在它们被使用前修复(demangle)它们的名字。
要记录一个函数被调用的次数,必须使用带有 -p 标志的 cc 命令编译文件。 -p 标志使得编译器插入一个 mcount 子例程的调用到为你的程序的每一个重新编译的函数产生的对象代码中。 当程序运行时,每次一个父函数调用一个子函数,子函数调用 mcount 子例程来增加那个父子对的独特的计数器。 不带 -p 标志重新编译的程序并不插入 mcount 子例程,因而并不对调用它们的函数进行记录。
-p 标志也会使对象文件包含程序开始和结束时调用 monitor 子例程的特殊概要文件启动函数。 当程序结束时对 monitor 子例程的调用实际上是写 mon.out 文件。因此,只有程序从主程序显式退出或返回时才产生 mon.out 文件。
对象装入的位置和名称储存在 mon.out 文件中。如果不选择任何标志,prof 将使用这些名称。必须指定一个程序或使用 -L 选项来访问其它对象。
注:导入的外部例程调用,例如对共享库例程的调用,都有一个对本地 glink 代码的中间调用来建立对实际例程的调用。 如果在运行这个代码时计时器时钟到时,那么时间被记入一个称为 routine.gl 的子例程,这里 routine 是被调用的子例程。 例如,如果在 glink 代码中调用 printf 子例程时计时器到时,那么时间被计入 printf.gl 子例程。
互斥标志 a、c、n 和 t 决定 prof 命令如何排序输出行:
-a | 按递增的符号地址排序。 |
-c | 按递减的调用数量排序。 |
-n | 通过符号名按词汇排序。 |
-t | 按递减的总时间的百分比排序(缺省)。 |
注:如果在同一命令中使用 a、c、n 和 t 标志中的多个,prof 命令仍然能够成功运行。prof 命令接受它在命令行上遇到的这些标志的第一个且忽略其它的。
互斥标志 o 和 x 指定如何显示每个受监视符号的地址。
-o | 与符号名一起以八进制显示每个地址。 |
-x | 与符号名一起以十六进制显示每个地址。 |
注:如果在同一命令中 -o 和 -x 标志同时使用,prof 命令仍然能够成功运行。prof 命令接受它在命令行上遇到的这两个标志的第一个且忽略另一个。
以任何组合使用以下标志:
prof -t -h
prof -x -L/home/score/lib runfile -m runfile.mon
mon.out | 缺省概要文件。 |
a.out | 缺省对象文件。 |
mon.sum | 摘要概要文件。 |
exit 子例程、profil 子例程和 monitor 子例程。
《AIX 5L V5.2 系统用户指南:操作系统与设备》中的命令概述。
AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Subroutines Overview。