このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

11.6.1 プローブ節

Dプログラムは、1つ以上のプローブ節のセットで構成されます。 各プローブ節の一般的な形式は、次のとおりです。

probe_description_1 [, probe_description_2]...
[/ predicate_statement /]
{
  [action_statement;]
  .
  .
  .
} 

すべてのプローブ節は、次の形式による1つ以上のプローブ記述のリストから始まります。

provider:module:function:probe_name

ここで、各フィールドは次のとおりです。

provider

このプローブを発行したDTraceプロバイダの名前。 カーネル・プローブでは、通常、プロバイダ名は、procなど、プローブを有効化するためにインストゥルメンテーションを実行するDTraceカーネル・モジュールの名前に対応しています。 DTrace対応のユーザー領域アプリケーションまたはライブラリをトレースするときに、このフィールドにはnamePIDの形式を使用します。ここで、nameは、アプリケーションまたはライブラリの作成に使用されたプロバイダ定義ファイルで定義されているプロバイダの名前、PIDは、実行中の実行可能ファイルのプロセスIDになります。

module

プローブがあるカーネル・モジュール、ライブラリ、またはユーザー領域プログラムの名前(ある場合)。vmlinuxなど。 このモジュールは、プロバイダを実装するカーネル・モジュールと同じではありません。

function

プローブが配置される関数の名前(do_forkなど)。

probe_name

プローブの名前は、通常、関数内の場所の説明です(createentryreturnなど)。

コンパイラは、フィールドを右から左に解釈します。 たとえば、プローブ記述のsettimeofday:entryは、プローブのプロバイダおよびモジュール・フィールドにかかわらず、settimeofdayという関数とentryという名前を持つプローブと一致します。 プローブ記述は、名前に基づいて1つ以上のプローブに一致するパターンとみなすことができます。 使用するプローブが一意の名前を持っている場合、プローブ名に先行するコロンは省略できます。 複数のプロバイダが同じ名前のプローブを公開している場合、使用可能なフィールドを使用して適切なプローブを取得します。 複数のプローブが同じ名前を持つ場合にプロバイダを指定しないと、予期しない結果が発生する可能性があります。 プロバイダのみを指定して、モジュール、関数およびプローブ名のフィールドを空白のままにすると、プロバイダのすべてのプローブに一致します。 たとえば、syscall:::は、syscallプロバイダによって公開されているすべてのプローブに一致します。

オプションの述語文で、プロセスID、コマンド名、タイムスタンプなどの基準を使用して、関連アクションを実行するかどうかを決定します。 述語を省略すると、関連アクションは、プローブの起動時に常に実行されます。

プローブ節には、?*および[]のシェル・ワイルドカードを使用できます。 たとえば、syscall::[gs]et*:は、getまたはsetで始まる関数名のすべてのsyscallプローブに一致します。 必要に応じて、\文字を使用して、名前の一部を構成するワイルドカード文字をエスケープしてください。

複数のプローブ記述に対して同じアクションを有効にできます。 たとえば、次のDプログラムでは、いずれかのプロセスによってmemまたはsocという文字列を含むシステム・コールが起動されるたびに、trace()関数を使用してタイムスタンプを記録します。

syscall::*mem*:entry, syscall::*soc*:entry
{
        trace(timestamp);
}

デフォルトでは、trace()関数によって、主バッファ(Dプログラム内の他のプローブ節によってアクセス可能で、プログラムの終了時にdtraceがその内容を表示するバッファ)に結果が書き込まれます。