このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。
Dプログラムは、1つ以上のプローブ節のセットで構成されます。 各プローブ節の一般的な形式は、次のとおりです。
probe_description_1
[,probe_description_2
]... [/predicate_statement
/] { [action_statement
;] . . . }
すべてのプローブ節は、次の形式による1つ以上のプローブ記述のリストから始まります。
provider
:module
:function
:probe_name
ここで、各フィールドは次のとおりです。
-
provider
このプローブを発行したDTraceプロバイダの名前。 カーネル・プローブでは、通常、プロバイダ名は、
proc
など、プローブを有効化するためにインストゥルメンテーションを実行するDTraceカーネル・モジュールの名前に対応しています。 DTrace対応のユーザー領域アプリケーションまたはライブラリをトレースするときに、このフィールドにはname
PID
の形式を使用します。ここで、name
は、アプリケーションまたはライブラリの作成に使用されたプロバイダ定義ファイルで定義されているプロバイダの名前、PID
は、実行中の実行可能ファイルのプロセスIDになります。-
module
プローブがあるカーネル・モジュール、ライブラリ、またはユーザー領域プログラムの名前(ある場合)。
vmlinux
など。 このモジュールは、プロバイダを実装するカーネル・モジュールと同じではありません。-
function
プローブが配置される関数の名前(
do_fork
など)。-
probe_name
プローブの名前は、通常、関数内の場所の説明です(
create
、entry
、return
など)。
コンパイラは、フィールドを右から左に解釈します。 たとえば、プローブ記述の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がその内容を表示するバッファ)に結果が書き込まれます。