Solaris 動的トレースガイド

文字列表現

DTrace では、文字列は NULL バイト (値がゼロのバイトで、通常 '\0' と記述される) で終わる文字配列として表現されます。文字列の可視部分は可変長で、NULL バイトの位置によって長さが決まります。しかし、DTrace では、各プローブが決まった量のデータをトレースするように、各文字列が固定サイズの配列に格納されます。文字列の長さは、あらかじめ定義されたこの制限長内に収まっていなければなりませんが、この制限長は D プログラム内で変更できます。dtrace コマンド行で strsize オプションをチューニングして変更することもできます。チューニング可能な DTrace オプションについては、第 16 章オプションとチューニング可能パラメータを参照してください。デフォルトの制限長は 256 バイトです。

D 言語で文字列を参照するときは、char * 型ではなく、明示的な string 型を使用します。string 型は、文字シーケンスのアドレスであるという点では char * 型と共通していますが、string 型の式では、D コンパイラや trace() などの D 関数の拡張機能を利用できます。たとえば、string 型では、文字列の実バイトをトレースするとき、char * 型のようなあいまいな点がありません。次の D 文を参照してください。

trace(s);

schar * 型の場合、DTrace はポインタ s の値をトレースします。つまり、整数アドレス値がトレースされることになります。次の D 文を参照してください。

trace(*s);

この場合、演算子 * の定義により、D コンパイラはポインタ s を間接参照し、その位置にある単一の文字をトレースします。この動作を利用して、単一の文字や、文字列でなく NULL バイトで終わっていないバイトサイズの整数配列を意図的に参照するような文字ポインタを操作できます。次の D 文を参照してください。

trace(s);

sstring 型の場合、この string 型は、変数 s にアドレスが格納されている NULL で終わる文字列をトレースするように、D コンパイラに指示を送ります。「文字列比較」で説明するように、string 型の式の文字列大小比較を行うこともできます。