Solaris 動的トレースガイド

プロバイダとプローブの定義

.d ソースファイルに DTrace プローブを定義します。このソースファイルは、あとでアプリケーションのコンパイルとリンク時に使用されます。まず、適切なユーザーアプリケーションプロバイダの名前を選択します。アプリケーションコードを実行している各プロセスのプロセス ID に、選択したプロバイダ名が追加されます。たとえば、プロセス ID 1203 で実行されている Web サーバー用としてプロバイダ名 myserv を選択した場合、このプロセスに対応する DTrace プロバイダ名は myserv1203 になります。.d ソースファイルに、次のようなプロバイダ定義を追加します。

provider myserv {
	...
};			

次に、各プローブとその引数の定義を追加します。次の例では、「プローブポイントの選択」で説明した 2 つのプローブを定義しています。最初のプローブは、string 型の引数を 2 つとります。2 番目のプローブは引数をとりません。D コンパイラは、プローブ名に含まれる 2 つの連続した下線 (--) を単一のハイフン (-) に変換します。

provider myserv {
	probe query__receive(string, string);
	probe query__respond();
};

プロバイダ定義には安定性属性を追加して、プローブの使用者がアプリケーションの将来のバージョンでの変更可能性について判断できるようにしてください。DTrace の安定性属性の詳細については、第 39 章安定性を参照してください。以下は、安定性属性の定義例です。


例 34–1 myserv.d: 静的に定義されたアプリケーションプローブ

#pragma D attributes Evolving/Evolving/Common provider myserv provider
#pragma D attributes Private/Private/Unknown provider myserv module
#pragma D attributes Private/Private/Unknown provider myserv function
#pragma D attributes Evolving/Evolving/Common provider myserv name
#pragma D attributes Evolving/Evolving/Common provider myserv args

provider myserv {
	probe query__receive(string, string);
	probe query__respond();
};


注 –

ユーザーが追加したプローブの整数でない引数を D スクリプト内で使用する場合、copyin() および copyinstr() 関数を使ってそれらの引数を取得する必要があります。詳細については、第 33 章ユーザープロセスのトレースを参照してください。