DTrace
Windows Server 2025 以降は、 dtrace
が組み込みのツールとして含まれています。 DTrace は、ユーザーがシステム パフォーマンスをリアルタイムで監視およびデバッグできるコマンド ライン ユーティリティです。 dtrace
を使用すると、ユーザーは、コード自体を変更することなく、カーネルとユーザー空間コードを動的にインストルメント化できます。
この強力なツールは、集計、ヒストグラム、ユーザー レベルのイベントのトレースなど、さまざまなデータ収集と分析の手法をサポートします。 プローブは、監視するプローブとプローブの起動時に実行するアクションをスクリプトで定義する dtrace
スクリプトで指定できます。 プローブは、これらのアクションを実行するためにデータを収集できるコード内の特定のポイントです。
Note
この組み込みポートは dtrace
、Windows 環境パラメーターやその他の機能用の DTrace の MSI インストーラーとは異なります。 Windows 用 DTrace の詳細については、「Windows 上の DTrace」を参照してください。
DTrace の使用に関する包括的なガイドについては、 動的トレース ガイドを参照してください。
DTrace を有効にする
dtrace
を使用する前に、最初に有効にする必要があります。 dtrace
を有効 にするには、管理者特権のコマンド プロンプトまたは PowerShell を管理者として開き、次のコマンドを実行します。
bcdedit /set dtrace on
この変更を有効にするには、再起動が必要です。
構文
dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]] [-I path]
[-L path] [-o output] [-p pid] [-s script] [-U name] [-x opt[=val]] [-X a|c|s|t]
[-y symbol path]
[-P provider [[ predicate ] action ]] [-m [ provider: ]
module [[ predicate ] action ]] [-f [[ provider: ] module: ]
func [[ predicate ] action ]] [-n [[[ provider: ] module: ] func: ]
name [[ predicate ] action ]] [-i probe-id [[ predicate ] action ]] [ args ... ]
Note
dtrace.exeのパラメーターでは、 大文字と小文字が区別されます。 予期しない動作を避けるために、パラメーターを指定するときは、必ず正しい大文字と小文字を使用してください。
パラメーター | 説明 |
---|---|
-b <bufsz> |
トレース データの格納に使用するバッファーのサイズを設定します。 bufsz は、バッファーの目的のサイズ (バイト、キロバイト (k)、メガバイト (m)、またはギガバイト (g) です。 |
-c <cmd> |
指定したコマンドを実行し、完了すると終了します。 cmd はトレースを開始する前に実行するコマンドです。 -c の複数のインスタンスが使用されている場合、すべてのコマンドの実行が完了すると dtrace が終了し、各子プロセスの終了状態が報告されます。 |
C: | トレースを実行する前に、スクリプト ファイルで ucpp プリプロセッサを実行します。 |
-D <name> =<def> |
プリプロセッサを呼び出すときにシンボルを定義します。 名前 は定義するシンボルの名前で、 def はシンボルに割り当てる省略可能な値です。 |
-e | 要求をコンパイルした後、プローブを有効にする前に終了します。 |
-f | 指定した関数名と一致するプローブを有効または一覧表示します。 |
F- | トレース出力を関数別に結合し、分析しやすくします。 |
-h | 静的プローブの定義を含むヘッダー ファイルを生成します。 |
-i <probe-id> |
指定したプローブ ID に一致するプローブを有効または一覧表示します。 probe-id は、トレースするプローブの識別子です。 |
-I <path> |
指定したディレクトリをプリプロセッサ検索パスに追加します。 パス は、 #include ファイルを含む追加するディレクトリです。 |
-l | -P、 -m、 -f、 -n、 -i、および -s パラメーターに基づいて、指定された条件に一致するプローブを一覧表示します。 これらのパラメーターが指定されていない場合は、すべてのプローブが一覧表示されます。 |
-L <path> |
指定したディレクトリをライブラリ検索パスに追加します。 パス は、共通の定義を含む追加するライブラリ ディレクトリです。 |
-m | provider:module または module の形式を使用して、指定したモジュール名と一致するプローブを引数で有効または一覧表示します。 モジュール名の他に修飾子が指定されていない場合は、そのモジュール名を持つすべてのプローブが一致します。 |
-n | provider:module:function:name、 module:function:name、 function:name、または nameの形式を使用して、指定したプローブ名と一致するプローブを引数に有効または一覧表示します。 プローブ名の他に修飾子が指定されていない場合は、そのモジュール名を持つすべてのプローブが一致します。 |
-o <output> |
トレース データの出力ファイルを設定します。 出力 は、トレース データに使用するファイルの名前です。 |
-p <pid> |
指定されたプロセス ID (PID) を取得し、そのシンボル テーブルをキャッシュします。これを使用して、プログラムの動作を分析できます。 |
-P <provider> |
指定したプロバイダー名に一致するプローブを有効または一覧表示します。 プロバイダー はプロバイダーの名前です。 -P パラメーターの複数のインスタンスを同時に使用できます。 |
-q | 明示的にトレースされたデータのみを出力するクワイエット モードを設定します。 |
-s <script> |
指定した D スクリプトに従ってプローブを有効または一覧表示します。ここで 、 スクリプト は実行するスクリプトの名前です。 -e を指定すると、プログラムはコンパイルされますが、データ収集は実行されません。 -l を指定すると、プログラムがコンパイルされ、一致したプローブのリストが表示されますが、データ収集は実行されません。 -e または -l が指定されていない場合は、プログラムがコンパイルされ、指定されたプローブに従ってデータ収集が実行され、トレースが開始されます。 |
S- | デバッグ用の D 言語コンパイラの中間コードを stderrに出力します。 |
-U <name> |
プリプロセッサを呼び出すときにシンボルを未定義にします。ここで 、 名前 は未定義にするシンボルの名前です。 |
-v | 安定性の属性と引数を報告する詳細モードを設定します。 |
-v | dtrace APIのバージョンが表示されます。 |
-w | -s、 -P、 -m、 -f、 -n、または -i パラメーターを指定した場合に破壊的アクションを許可します。 破壊的アクションには、カーネル変数の変更、システム呼び出しの動作の変更、システムのクラッシュなどのアクションが含まれる場合があります。 |
-x <opt> =<val> |
コンパイラとトレースのオプションを有効または変更します。 opt は有効または変更するオプションの名前で、 val は省略可能な値です。 |
-X <a|c|s|t> |
cpp を呼び出すときに、コンパイルされる C コードが ISO C 標準に準拠する厳密さを制御します。 次の引数を使用できます。
|
-y <symbol path> |
解決する dtrace スクリプトのシンボル検索パスを設定します。 シンボル パス は、シンボルを含む共有ライブラリまたはディレクトリへのパスです。 詳細については、「シンボル パス」を参照してください 。 |
-y | dtrace スクリプトの デフォルト シンボル検索パスを使用します。 |
Z- | デバッグ用のゼロ プローブと一致するプローブの説明を許可します。 |
次の一覧では、それ以外の説明について説明します。
述語: 述語はスラッシュ (
/ /
) で囲まれ、D 式です。これは、変数、定数、および関数を参照できるブール式です。 述語を使用して、これらのイベントに基づいて出力をdtrace
フィルター処理できます。 この式は、プローブが起動されるたびに評価されます。 述語が true と評価された場合は、関連付けられているアクションが実行されます。アクション: アクションは中かっこ (
{ }
) で囲まれており、プローブの起動時に実行される D 言語ステートメントのセットであり、関連する述語がある場合は true と評価されます。 アクションは、出力ステートメントの出力、データの記録、シグナルの送信や変数の変更などの他の操作の実行に使用できます。モジュール: 関連するプローブのセットを含むプロバイダーのコンポーネント。
dtrace
スクリプトでモジュールを指定して、スクリプトの範囲を特定のモジュールまたはモジュールのセットに制限できます。Func: プローブに関連付けられている関数名。 たとえば、
syscall::NtReadFile
プローブはread
関数に関連付けられています。dtrace
スクリプトで関数を指定して、スクリプトの範囲を特定の関数または関数のセットに制限できます。Args: プローブの起動時にアクション式に渡される引数と、関連付けられている述語 (存在する場合) が true に評価されます。 Args は、関数引数の値やシステム呼び出しの戻り値など、プローブ コンテキストからデータをキャプチャするために使用できます。 Args は、プローブ間でデータを渡したり、スクリプトの動作を変更したりするためにも使用できます。
例
すべてのシステム呼び出しをトレースするには、実行可能ファイルの名前と実行されているシステム呼び出しの名前を出力して、次を実行します。
dtrace -n 'syscall:::entry { printf("%s called syscall %s", execname, probefunc); }'
このコマンドは、指定した PID を使用してプロセス内の "function_name" 関数をトレースし、関数の名前、それを呼び出すプロセスの PID、および実行可能ファイルの名前を出力します。
dtrace -n 'pid$target::function_name:entry { printf("Function %s called by process %d (%s)", probefunc, pid, execname); }' -p <PID>
dtrace
の使用に関するその他の例については、「DTrace の概要 - 1 行のコマンド」を参照してください。