Solaris 動的トレースガイド

printa()

printa() 関数は、D プログラム内の集積体の結果の書式設定に使用します。この関数は、次のいずれかの形式で呼び出します。

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

最初の形式を使用した場合、dtrace(1M) コマンドは、集積体 aggregation-name のデータのスナップショットを取り、集積体のデフォルト出力書式 (第 9 章集積体を参照) と同じ書式で結果を出力します。

2 番目の形式を使用した場合、dtrace(1M) コマンドは、集積体 aggregation-name のデータのスナップショットを取り、次の規則に従って format string に指定された変換を適用し、その結果を出力します。

以下に、printa() を使用する D プログラムの例を示します。この例では、profile プロバイダを使って caller の値を収集し、結果を単純なテーブルとして書式設定しています。

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

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

dtrace でこのプログラムを実行し、しばらく待ってから Control-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
       ...