为使用 gprof 分析器进行分析而编译。(-xpg 与 -pg 等效)
以 -p 的方式编译自分析代码,但调用一种运行时记录机制,该机制可保存更广泛的统计信息并在程序正常终止时生成 gmon.out 文件。通过运行 gprof 生成执行分析概要。 有关详细信息,请参见 gprof(1) 手册页和《Fortran 编程指南》。
库选项必须跟在源文件和 .o 文件之后(–pg 库是静态的)。
使用 prof(1) 或 gprof(1)(在 64 位 Solaris 平台上)或者仅使用 gprof(在 32 位 Solaris 平台上)生成的分析中包括大致的用户 CPU 时间。这些时间来自主可执行文件中的例程以及共享库中例程(链接可执行文件时将共享库指定为链接程序参数)的 PC 示例数据(请参见 pcsample(2))。其他共享库(在进程启动后使用 dlopen(3DL) 打开的库)不进行分析。
在 32 位 Oracle Solaris 系统中,使用 prof(1) 生成的分析仅限于可执行文件中的例程。通过使用 -pg 链接可执行文件并使用 gprof(1),可以对 32 位共享库进行分析。
Solaris 10 软件不包括使用 -p 编译的系统库。因此,在 Solaris 10 平台上收集的分析不包含系统库例程的调用计数。
不应当使用编译器选项 -p、-pg 或 -xpg 来编译多线程程序,因为这些选项的运行时支持不是线程安全的。如果利用这些选项来编译使用多个线程的程序,则可能会在运行时产生无效结果或段故障。
为执行 gprof 分析而使用 -xpg 编译的二进制代码不应与 binopt(1) 一起使用,因为这两者不能兼容,结合使用会导致内部错误。
如果在不同的步骤中进行编译和链接,并使用 -pg 进行编译,请确保使用 -pg 进行链接。
在 x86 系统上,-pg 与 -xregs=frameptr 不兼容,这两个选项不应一起使用。还请注意,-fast 中包括 -xregs=frameptr。