機械翻訳について

プログラム構造

Dプログラムは、有効にするプローブを記述する一連の節、実行のタイミングを制御するオプションの述語、および通常はプローブの起動時に実装する機能を記述する1つ以上の文で構成されます。

Dプログラムには、変数の宣言と新しい型の定義を含めることもできます。 プローブ節の宣言では、次の構造体が使用されます:

probe descriptions 
/ predicate / 
{
  statements
}
プローブ記述

プローブの説明は、プローブの完全な記述を観念的に表し、次の形式を取ります:

provider:module:function:name

フィールド記述子の定義は次のとおりです:

provider

プローブが属するDTraceプロバイダの名前。

module

プローブが特定のプログラムの場所に対応している場合は、そのプローブがあるカーネル・モジュール、ライブラリまたはユーザー空間プログラムの名前。 一部のプローブは、より抽象的なトレース・ポイントに関連する場合、特定のソースの場所に拘束されないモジュール名に関連付けられていることがあります。

function

プローブが特定のプログラムの場所に対応している場合は、そのプローブがあるプログラム関数の名前。

name

プローブのセマンティックな意味がわかる名前(BEGINENDなど)。

DTraceは、プローブを参照するときに短縮形を認識します。 慣例により、プローブ記述の一部のフィールドが指定されていない場合、DTraceは、指定されている名前部分の値と一致するすべてのプローブにリクエストを一致させます。 たとえば、プロバイダ、モジュールおよび関数のフィールドの値とは無関係に、名前フィールドがBEGINすべてのプローブと一致するように、スクリプト内でプローブ名BEGINを参照できます。 たとえば、次のように参照されるプローブが見つかることがあります:

BEGIN

プローブがDプログラム内で参照されていて、完全なプローブ記述を使用していない場合、フィールドは優先順位に基づいて解釈されます:

  • 次のように表された単一の構成要素は、プローブ名に一致します:
    name
  • 次のように表された2つの構成要素は、関数とプローブ名に一致します:
    function:name
  • 3つの構成要素は、モジュール、関数、プローブ名に一致します
    module:function:name

プローブはIDで参照することもできますが、この値は時間の経過によって変化する可能性があります。 新しいプロバイダ・モジュールはいつでもロードでき、新しいプローブをオンザフライで作成できるプロバイダもあるため、システム上のプローブの数はIDと直接相関しません。 数値のプローブIDを使用したプローブの参照は避けてください。

プローブ記述では、シェルのグロブというパターン・マッチング構文(sh(1)マニュアル・ページを参照)と類似したパターン・マッチング構文もサポートされます。 たとえば、次の説明のように、アスタリスク記号(*)を使用してワイルドカード一致を実行できます:

sdt:::tcp*

プローブ記述に空白のフィールドがある場合、そのフィールドに対してワイルドカード一致が実行されます。

意図的に複数のプローブを一致させる場合を除いて、予測不可能な結果を回避するために、完全なプローブ記述を指定するようにお薦めします。

表4-1 プローブ名パターン一致文字

記号 説明

*

NULL文字列を含む、任意の文字列に一致します。

?

任意の1文字を検索します。

[]

大カッコ内のいずれかの文字と一致します。 文字のペアを-で区切ると、そのペア間(両端の文字を含む)の任意の文字に一致します。 [の後ろの最初の文字を!にすると、カッコ内に含まれない任意の文字と一致します。

\

次の文字に特別な意味を持たせず、文字どおりに解釈します。

プローブが正常に照合されて有効化されるには、すべてのフィールドで完全なプローブ記述が一致する必要があります。 パターンではないプローブ記述フィールドは、それに対応するプローブのフィールドと完全に一致する必要があります。 空の記述フィールドは、すべてのプローブと一致する点に注意してください。

複数のプローブはコンマ区切りリストに含めることができます。 複数のプローブを記述に含めることで、各プローブがアクティブ化されるときに同じ述語と関数のシーケンスが適用されます。

述語

述語は、スラッシュのペア(//)の間に現れる式で、関連する関数の処理が必要かどうかを判断するためにプローブの起動時に評価されます。 述語は、Dプログラムでより複雑な制御フローを作成するために使用される主要な条件構成です。 プローブ節の述語部分は、どのプローブでも完全に省略できます。この場合、プローブの起動時に常に関数が処理されるようになります。

述語式では、すべてのD演算子を使用できます。また、変数や定数などの任意のDデータ・オブジェクトを含めることができます。 述語式は、真または偽の結果を導き出すため、整数型またはポインタ型の値に評価される必要があります。 すべてのD式と同じく、ゼロ値は偽、ゼロ以外の値は真と解釈されます。

文は、セミコロン(;)で区切られ、中カッコ({})で囲まれた式または関数のリストによって記述されます。 文が含まれていない空の中カッコのセットでは、デフォルト・アクションが処理されます。 デフォルト・アクションは、プローブのアクティブ化を報告します。

プログラムは、複数のプローブ節の宣言で構成できます。 節はプログラム順に実行されます。

プログラムはファイル・システムに格納して、DTraceユーティリティで実行できます。 プログラムを実行可能スクリプトに変換するには、ファイルの先頭にdtraceコマンドを呼び出すインタプリタ・ディレクティブと、プログラムの実行に必要なオプションを1つの引数として追加します。 スクリプトの先頭にインタプリタ行を追加する際の詳細は、sh(1)マニュアル・ページを参照してください。 インタプリタ・ディレクティブは次のようになります:

#!/usr/sbin/dtrace -qs

スクリプトには、実行時オプションとコンパイラ・オプションを設定するためのDプラグマ指令を含めることもできます。 この情報をスクリプトに含める方法の詳細は、「DTraceの実行時およびコンパイル時のオプション・リファレンス」を参照してください。