.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 章安定性を参照してください。以下は、安定性属性の定義例です。
#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 章ユーザープロセスのトレースを参照してください。