控制是否应当记录后续进程的数据。option 的允许值包括:
on-仅针对由函数 fork(及其变体)和 exec(及其变体)创建的后续进程记录实验。
all-针对所有后续进程记录实验。
off-不针对后续进程记录实验。
=regexp-针对其名称或沿袭与指定的正则表达式匹配的所有后续进程记录实验。
如果您指定 -F on 选项,收集器将跟踪通过调用函数 fork(2)、fork1(2)、fork(3F)、vfork(2) 和 exec(2) 及其变体而创建的进程。对 vfork 的调用已在内部被替换为对 fork1 的调用。
如果您指定 -F all 选项,收集器将跟踪所有后续进程,其中包括那些通过调用 system(3C)、system(3F)、sh(3F) 和 popen(3C) 以及类似函数而创建的后续进程以及与它们相关的后续进程。
如果您指定 -F '= regexp' 选项,收集器将跟踪其名称或沿袭与指定的正则表达式相匹配的所有后续进程。有关正则表达式的信息,请参见 regexp(5) 手册页。
当您在后续进程上收集数据时,收集器会针对创始实验中的每个后续进程打开一个新实验。这些新实验是通过向实验后缀添加一个下划线、一个字母和一个数字来命名的,如下所示:
字母可以是 "f"(表示派生)、"x"(表示执行)或 "c"(表示任何其他后续进程)。
数字是派生或执行(无论是否成功)或其他调用的索引。
例如,如果初始进程的实验名称是 test.1.er,则由它的第三个派生创建的子进程的实验是 test.1.er/_f3.er。如果该子进程针对新映像执行 exec 操作,则相应的实验名称为 test.1.er/_f3_x1.er。如果该子进程使用 popen 调用创建另一个进程,则实验名称为 test.1.er/_f3_x1_c1.er。
分析器和 er_print 实用程序在读取创始实验后会自动读取后续进程的实验,但不会选择将后续进程的实验用于数据显示。
要从命令行中选择要显示的数据,请明确指定 er_print 或 analyzer 的路径名。所指定的路径必须包含创始实验的名称以及创始目录中后续实验的名称。
例如,要查看 test.1.er 实验的第三个派生的数据,需要指定以下内容:
er_print test.1.er/_f3.er
analyzer test.1.er/_f3.er
或者,可以使用感兴趣的后续实验的显式名称来准备实验组文件。
要在分析器中检查后续进程,请装入创始实验并从“视图”菜单中选择“过滤数据”。此时将显示一个实验列表,其中只有创始实验处于选中状态。取消选中初始实验并选中感兴趣的后续实验。
如果在后续进程正在被跟踪时创始进程退出,则可能会继续从后续进程中收集数据。创始实验目录会相应地继续变大。
当目标程序是 JVM 时,启用 Java 分析。option 的允许值包括:
on-识别由 Java HotSpot 虚拟机编译的方法并尝试记录 Java 调用栈。
off-不尝试识别由 Java HotSpot 虚拟机编译的方法。
path-记录安装在指定 path 中的 JVM 的分析数据。
如果要收集 .class 文件或 .jar 文件中的数据,则不需要 -j 选项,但前提是 java 可执行文件的路径在 JDK_HOME 环境变量或 JAVA_PATH 环境变量中。随后可以在 collect 命令行上将目标 program 指定为具有或不具有扩展名的 .class 文件或 .jar 文件。
如果无法在 JDK_HOME 或 JAVA_PATH 环境变量中定义java 的路径,或者要禁用对 Java HotSpot 虚拟机所编译的方法的识别,则可以使用 -j 选项。如果使用该选项,则在 collect 命令行上指定的 program 必须是版本不低于 1.5_03 的 Java 虚拟机。collect 命令验证 program 是否为 JVM 以及是否为 ELF 可执行文件;如果不是,collect 命令会列显一条错误消息。
如果要使用 64 位 JVM 收集数据,则不能将 java 的 -d64 选项用于 32 位 JVM,否则将收集不到任何数据;相反,您必须在 collect 命令的 program 参数中或本节提供的两个环境变量之一中指定 64 位 JVM 的路径。
指定要传递到用于分析的 JVM 的单个参数。如果您指定了 -J 选项但未指定 Java 分析,则会生成一个错误并且不运行实验。该参数作为单个参数传递到 JVM。如果需要多个参数,请不要使用 -J 选项,而是明确指定 JVM 的路径,使用 -j on,并在 collect 命令行上在 JVM 路径的后面添加 JVM 的参数。
可以通过全信号名、不带开始的几个字母 SIG 的信号名或信号编号来指定信号。请不要使用程序所使用的信号或会终止执行的信号。建议的信号为 SIGUSR1 和 SIGUSR2。可通过 kill 命令将信号传递到进程。
如果同时使用 -l 和 -y 选项,则必须针对每个选项使用不同的信号。
如果您使用该选项而程序具有其自己的信号处理程序,则应当确保使用 -l 指定的信号会传递到收集器的信号处理程序,而不是被截获或忽略。
有关信号的更多信息,请参见 signal(3HEAD) 手册页。
指定数据收集的时间范围。
可以将 duration 指定为单个数字(可以选择添加 m 或 s 后缀)以指示实验在该时间(单位为分钟或秒)终止。缺省情况下,持续时间以秒为单位。也可以将 duration 指定为用连字符分隔的两个这样的数字,这会导致数据收集暂停,直到经过第一个时间之后才开始收集数据。当到达第二个时间时,数据收集终止。如果第二个数字为零,则在初次暂停之后收集数据,直到该程序运行结束。即使该实验已经终止,也允许目标进程运行至结束。
在从 exec 系统调用退出时使目标进程停止,以便允许调试器附加到目标进程。如果将 dbx 附加到目标进程,请使用 dbx 命令 ignore PROF 和 ignore EMT 来确保收集信号传递到 collect 命令。
控制对包含名为 signal 的信号的数据的记录。无论何时将信号传递到进程,它都在暂停状态(在此期间不记录任何数据)和记录状态(在此期间记录数据)之间切换。无论切换状态如何,都将始终记录样本点。
可以通过全信号名、不带开始的几个字母 SIG 的信号名或信号编号来指定信号。请不要使用程序所使用的信号或会终止执行的信号。建议的信号为 SIGUSR1 和 SIGUSR2。可通过 kill(1) 命令将信号传递到进程。
如果同时使用 -l 和 -y 选项,则必须针对每个选项使用不同的信号。
使用 -y 选项时,如果已提供可选的 r 参数,则收集器将在记录状态下启动,否则将在暂停状态下启动。如果未使用 -y 选项,则收集器将在记录状态下启动。
如果您使用该选项而程序具有其自己的信号处理程序,则应当确保使用 -y 指定的信号会传递到收集器的信号处理程序,而不是被截获或忽略。
有关信号的更多信息,请参见 signal(3HEAD) 手册页。