引数の名前に含まれている数字 1 〜 5 は、プローブポイントに指定する変数の数を表します。たとえば、TNF_PROBE_1 の構文は次のようになっています。
TNF_PROBE_1(name, keys, detail, arg_type_1, arg_name_1, arg_value_1);
また、TNF_PROBE_5 の構文は次のようになっています。
TNF_PROBE_5(name, keys, detail, arg_type_1, arg_name_1, arg_value_1 arg_type_2, arg_name_2, arg_value_2 arg_type_3, arg_name_3, arg_value_3 arg_type_4, arg_name_4, arg_value_4 arg_type_5, arg_name_5, arg_value_5);
以下、各引数について説明します。
arg_type_n − n 番目の引数の型です。n には 1 〜 5 の数字が入ります。定義済みの型を表 1-9 に示します。ユーザー独自の型の定義については、「プローブポイントのユーザー定義型」 を参照してください。
arg_name_n − n 番目の引数に与える名前です。 ANSI C の識別子に関する規則に従ってください。また、引数の名前は、引用符で囲まないでください。(「属性」で取り上げた slots 属性には、この名前の文字列の場合が含まれています。)
arg_value_n − トレースファイルに含まれている値に対して評価される式です。value_n に含まれている任意の変数に対して読み取り (アクセス) を行うことができます。マルチスレッドのプログラムで、読み取りを禁止する必要があるデータが value_n に含まれている場合には、マクロ TNF_PROBE_n の前後にロックを配置してください。
型 |
対応する C 言語の型と意味 |
---|---|
tnf_long |
int、long |
tnf_ulong |
unsigned int、unsigned long |
tnf_longlong |
long long (コンパイラに実装されている場合) |
tnf_ulonglong |
unsigned long long (コンパイラに実装されている場合) |
tnf_float |
float |
tnf_double |
double |
tnf_string |
char * |
tnf_opaque |
void * |
たとえば、「C プログラムのサンプル」の cookie.c では、以下のように TNF_PROBE_2 を使用しています。
TNF_PROBE_2(inloop, "cookie main loop","sunw%debug in the loop", tnf_long, loop_count, i, tnf_long, total_iterations, sum);
cookie.c のマクロ定義の一部について、表 1-10 で説明します。
表 1-10 cookie.c の TNF マクロ定義
TNF_PROBE_0 ( |
引数の型が指定されていないプローブ |
start, |
プローブの名前 |
"cookie main", |
プローブが cookie と main (keys 属性の値) に属しているグループのリスト |
"sunw%debug starting main"); |
ユーザー定義の属性 = sunw%debug、値 = starting main (デバッグプローブ関数で使用されます) |
TNF_PROBE_2 ( |
2 つの変数を持ったプローブ |
inloop, |
プローブの名前 |
"cookie main loop", |
keys - cookie、main、loop |
"sunw%debug in the loop", |
デバッグプローブ関数の値 |
tnf_long, |
最初の変数の型 |
loop_count, |
最初の変数の名前 (slots 属性の値) |
i, |
最初の変数 |
tnf_long, |
2 番目の変数の型 |
total_iterations, |
2 番目の変数の名前 (slots 属性の値) |
sum); |
2 番目の変数 |
""); |