DTrace ユーザーガイド

データ記録アクション

この節では、デフォルトで主バッファーにデータを記録するアクションを紹介します。これらのアクションを使って、投機バッファーにデータを記録することもできます。投機バッファーについては、「投機トレース」を参照してください。

trace() 関数

void trace(expression)

もっとも基本的なアクションは、D 式 expression を引数とし、指定バッファーに結果をトレースする trace() アクションです。

tracemem() 関数

void tracemem(address, size_t nbytes)

tracemem() アクションは、メモリー内のアドレスからバッファーにデータをコピーします。nbytes には、このアクションによってコピーされるバイト数を指定します。address には、コピーされるデータのアドレスを D 式で指定します。指定バッファーにコピーします。

printf() 関数

void printf(string format, ...) 

printf() アクションは、trace() アクションと同じように D 式をトレースします。ただし、printf() アクションでは、printf(3C) 関数と同様の方法で書式を制御できます。printf 関数の場合と同じく、パラメータは format 文字列と任意の数の引数です。デフォルトでは、これらの引数が指定バッファーにトレースされます。その後、指定された書式設定文字列に従って、これらの引数に dtrace コマンドの出力書式が設定されます。

printf() アクションの詳細については、『Solaris 動的トレースガイド』の第 12 章「出力書式」を参照してください。

printa() 関数

void printa(aggregation)
void printa(string format, aggregation)

printa() アクションでは、集積体に書式を設定して表示できます。集積体の詳細については、『Solaris 動的トレースガイド』の第 9 章「集積体」を参照してください。format 値を省略した場合、printa() アクションは DTrace コンシューマへの指令だけをトレースします。その指令を受け取ったコンシューマは、集積体をデフォルトの書式に編集して表示します。printa() の書式文字列については、『Solaris 動的トレースガイド』の第 12 章「出力書式」を参照してください。

stack() 関数

void stack(int nframes)
void stack(void)

stack() アクションは、カーネルスタックトレースを指定バッファーに記録します。nframes には、カーネルスタックの深さを指定します。nframes 値を省略した場合、stack() アクションは、stackframes オプションで指定された数のスタックフレームを記録します。

ustack() 関数

void ustack(int nframes, int strsize)
void ustack(int nframes)
void ustack(void)

ustack() アクションは、指定バッファーにユーザースタックトレースを記録します。nframes には、ユーザースタックの深さを指定します。nframes 値を省略した場合、ustack アクションは、ustackframes オプションで指定された数のスタックフレームを記録します。ustack() アクションは、プローブが起動するときに、呼び出しフレームのアドレスを特定します。スタックフレームは、DTrace コンシューマがユーザーレベルで ustack() アクションを処理したときに、シンボルに翻訳されます。strsize にゼロ以外の値を指定した場合、ustack() アクションは指定された容量の文字列空間を割り当て、これを使ってカーネルから直接、アドレスからシンボルへの翻訳を行います。

jstack() 関数

void jstack(int nframes, int strsize)
void jstack(int nframes)
void jstack(void)

jstack() アクションは、ustack() アクションの別名で、スタックフレーム数については jstackframes オプションに指定されている値を使用します。jstackアクションは、jstackstrsize オプションに指定された値を使って、文字列空間のサイズを決定します。デフォルトでは、jstacksize アクションはゼロ以外の値になります。