Solaris 动态跟踪指南

printa()

printa() 函数用于格式化 D 程序中聚合的结果。可通过下列两种形式之一来调用该函数:

printa(@aggregation-name);
printa(format-string, @aggregation-name);

如果使用函数的第一种形式,则 dtrace(1M) 命令将提取聚合数据的一致快照并生成输出,该输出与用于聚合的缺省输出格式等效,如第 9 章中所述。

如果使用函数的第二种形式,则 dtrace(1M) 命令将提取聚合数据的一致快照,并根据 format string 中指定的转换以及下列规则来生成输出:

以下 D 程序显示 printa() 的完整示例,通过使用 profile 提供器来对 caller 的值进行采样,然后将结果格式化为简单的表:

profile:::profile-997
{
	@a[caller] = count();
}

END
{
	printa("%@8u %a\n", @a);
}

如果使用 dtrace 来执行此程序,请等待几秒钟,然后按 Ctrl-C 组合键,将会看到与以下示例类似的输出:


# dtrace -s printa.d
^C
CPU     ID                    FUNCTION:NAME
  1      2                             :END        1 0x1
       1 ohci`ohci_handle_root_hub_status_change+0x148
       1 specfs`spec_write+0xe0
       1 0xff14f950
       1 genunix`cyclic_softint+0x588
       1 0xfef2280c
       1 genunix`getf+0xdc
       1 ufs`ufs_icheck+0x50
       1 genunix`infpollinfo+0x80
       1 genunix`kmem_log_enter+0x1e8
       ...