次の方法で共有


DTrace

Windows Server 2025 以降、 dtrace は組み込みツールとして含まれています。 DTrace は、ユーザーがシステム パフォーマンスをリアルタイムで監視およびデバッグできるコマンド ライン ユーティリティです。 dtraceを使用すると、ユーザーはコード自体を変更することなく、カーネルとユーザー空間コードを動的にインストルメント化できます。

この強力なツールは、集計、ヒストグラム、ユーザー レベルのイベントのトレースなど、さまざまなデータ収集と分析の手法をサポートします。 プローブは、 dtrace スクリプトで指定できます。このスクリプトでは、監視するプローブと、プローブの起動時に実行されるアクションを定義します。 プローブは、これらのアクションを実行するためにデータを収集できるコード内の特定のポイントです。

この 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 ... ]

dtrace.exe のパラメーターでは、 大文字と小文字が区別されます。 予期しない動作を避けるために、パラメーターを指定するときは、必ず正しい大文字と小文字を使用してください。

パラメーター 説明
-b <bufsz> トレース データの格納に使用するバッファーのサイズを設定します。 bufsz は、バッファーの目的のサイズ (バイト、キロバイト (k)、メガバイト (m)、またはギガバイト (g) です。
-c <cmd> 指定したコマンドを実行し、完了すると終了します。 cmd はトレースを開始する前に実行するコマンドです。 c の複数 のインスタンスが使用されている場合、すべてのコマンドの実行が完了すると dtrace が終了し、各子プロセスの終了状態が報告されます。
-C トレースを実行する前に、スクリプト ファイルで ucpp プリプロセッサを実行します。
-D <name>=<def> プリプロセッサを呼び出すときにシンボルを定義します。 名前 は定義するシンボルの名前で、 def はシンボルに割り当てる省略可能な値です。
-エ 要求をコンパイルした後、プローブを有効にする前に終了します。
-f 指定した関数名と一致するプローブを有効または一覧表示します。
-F トレース出力を関数別に結合し、分析しやすくします。
-h 静的プローブの定義を含むヘッダー ファイルを生成します。
-私 <probe-id> 指定したプローブ ID に一致するプローブを有効または一覧表示します。 probe-id は、トレースするプローブの識別子です。
-私 <path> 指定したディレクトリをプリプロセッサ検索パスに追加します。 パス は、 #include ファイルを含む追加するディレクトリです。
-l P、-m、-f、-n-i、および -s パラメーターに基づいて、指定された条件に一致するプローブを一覧表示します。 これらのパラメーターが指定されていない場合は、すべてのプローブが一覧表示されます。
-L <path> 指定したディレクトリをライブラリ検索パスに追加します。 パス は、共通の定義を含む追加するライブラリ ディレクトリです。
-メートル 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 標準に準拠する厳密さを制御します。 使用できる引数は次のとおりです。
  • -Xa (既定値): ISO C に加えて、ISO C に必要なセマンティック変更を含む K&R 互換性拡張機能を提供します。定義済みのマクロ __STDC__は、cpp が呼び出されたときに 0 の値を持ちます。
  • -Xc (準拠): K&R C 互換性拡張なしで ISO C の厳密な準拠を提供します。 定義済みのマクロ __STDC__は、cpp が呼び出されたときに 1 の値を持ちます。
  • -Xs (K&R C): K&R C のみを提供し、__STDC__ マクロは cpp の呼び出し時に定義されません。
  • -Xt (遷移): ISO C に必要なセマンティック変更を伴わない ISO C と K&R C の互換性拡張を提供します。定義済みのマクロ __STDC__は、cpp が呼び出されたときに 0 の値を持ちます。
-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 行のコマンド」を参照してください。

こちらも参照ください