Solaris 動的トレースガイド

変換書式

各変換文字シーケンスでは、0 個以上の引数のフェッチが行われます。書式設定文字列の引数の指定が不適切な場合や、書式設定文字列がなくなって引数が余ってしまった場合、D コンパイラはエラーメッセージを発行します。未定義の変換書式が指定された場合も、D コンパイラはエラーメッセージを発行します。変換文字シーケンスは、以下のとおりです。

a

ポインタ (uintptr_t 引数) は、カーネルシンボル名 (module`symbol-name に任意の 16 進バイトオフセットを追加した形式) として出力されます。この値が、既知のカーネルシンボルで定義された範囲にない場合は、16 進整数として出力されます。

c

引数 charshortint は ASCII 文字として出力されます。

C

引数 charshortint は、プリント可能 ASCII 文字である場合、ASCII 文字として出力されます。出力可能文字でない場合、表 2–5 のように、対応するエスケープシーケンスを使って出力されます。

d

引数 charshortintlonglong long は、10 進 (base 10) 整数として出力されます。引数が signed である場合、符号付きの値が出力されます。引数が unsigned である場合、符号なしの値が出力されます。この変換の効果は、i と同じです。

e、E

引数 floatdoublelong double は、[-]d. ddddd (基数文字の前は 1 桁、後ろは精度と同じ桁数) の形式に変換されます。引数がゼロ以外の場合、基数文字もゼロ以外になります。精度を指定しない場合は、デフォルトの精度値は 6 です。精度が 0 で # フラグを指定しない場合は、基数文字は表示されません。E 変換書式では、e ではなく E の付いた指数が生成されます。指数は必ず 2 桁以上になります。値は、適切な桁数で丸められます。

f

引数 floatdoublelong double は、[-]ddd.ddd (基数文字の後ろは精度と同じ桁数) の形式に変換されます。精度を指定しない場合は、デフォルトの精度値は 6 です。精度が 0 で # フラグを指定しない場合は、基数文字は表示されません。基数文字が表示されるときは、必ずその前に 1 桁以上の数字が表示されます。値は、適切な桁数で丸められます。

g、G

引数 floatdoublelong double は、f または e の形式、さらに G 変換文字の場合は E の形式で、出力されます。有効桁数を示す精度も出力されます。明示的な精度が 0 の場合、1 と見なされます。どの形式が使用されるかは、変換対象の値によって異なります。たとえば、e または E 形式は、変換の結果として得られた指数が、-4 より小さいか、または精度の値以上の場合にかぎって、使用されます。結果の小数部分がゼロの場合、この部分は省略されます。基数文字は、その後ろに桁がある場合にしか表示されません。# フラグを指定すると、結果の小数部分のゼロが省略されなくなります。

i

引数 charshortintlonglong long は、10 進 (base 10) 整数として出力されます。引数が signed である場合、符号付きの値が出力されます。引数が unsigned である場合、符号なしの値が出力されます。この変換の効果は、d と同じです。

o

引数 charshortintlonglong long は、符号なし 8 進 (base 8) 整数として出力されます。この変換では、signed の引数または unsigned の引数を使用できます。# フラグを指定すると、結果の最初の桁を強制的にゼロにする必要がある場合に、結果の精度が上がります。

p

ポインタ (uintptr_t) 引数は、16 進 (base 16) 整数として出力されます。D では、あらゆる型のポインタ引数を使用できます。# フラグを指定すると、結果がゼロ以外になった場合、その前に 0x が付加されます。

s

引数は、char の配列か string でなければなりません。配列または string のバイトが終端 NULL 文字またはデータの終わりまで読み取られ、解釈されたあと、ASCII 文字として出力されます。精度を省略した場合、精度は無限と見なされます。したがって、最初の NULL 文字までのすべての文字が出力されます。精度を指定した場合、文字配列のうち、対応するスクリーンカラム数で表示される部分だけが出力されます。書式設定の対象の引数が char * 型である場合、string にキャストするか、引数の前に D 演算子 stringof を付加します。この演算子を付加すると、DTrace は、文字列のバイト数だけをトレースし、書式設定を行うようになります。

S

引数は、char の配列か string でなければなりません。引数は、%s 変換の場合と同様にして処理されます。ただし、プリント可能な ASCII 文字でない場合は、表 2–5 のように、対応するエスケープシーケンスで置き換えられます。

u

引数 charshortintlonglong long は、符号なし 10 進 (base 10) 整数として出力されます。この変換では、signed の引数または unsigned の引数を使用できます。結果は常に unsigned の書式になります。

wc

引数 int はワイド文字 (wchar_t) に変換され、このワイド文字が出力されます。

ws

引数は、wchar_t の配列でなければなりません。配列のバイトが終端 NULL 文字またはデータの終わりまで読み取られ、解釈されたあと、ワイド文字として出力されます。精度を省略した場合、精度は無限と見なされます。したがって、最初の NULL 文字までのすべてのワイド文字が出力されます。精度を指定した場合、ワイド文字配列のうち、対応するスクリーンカラム数で表示される部分だけが出力されます。

x、X

引数 charshortintlonglong long は、符号なし 16 進 (base 16) 整数として出力されます。この変換では、signed の引数または unsigned の引数を使用できます。x 形式の変換の場合、文字数字 abcdef を使用します。X 形式の変換の場合、文字数字 ABCDEF を使用します。# フラグを指定すると、結果がゼロ以外になった場合、その前に 0x (%x の場合)、または 0X (%X の場合) が付加されます。

Y

引数 uint64_t は、協定世界時の 1970 年 1 月 1 日 00:00 からの経過時間 (ナノ秒数) として解釈され、「%Y %a %b %e %T %Z」のような cftime(3C) 形式で出力されます。協定世界時の 1970 年 1 月 1 日 00:00 からの経過時間 (ナノ秒数) は、walltimestamp 変数で表されます。

%

パーセント記号 (%) を文字どおりに出力します。引数の変換は行われません。変換指定は %% だけです。