DTraceがWindowsで利用可能になりました
次のWindows10機能アップデート(19H1、2019年4月アップデート、バージョン1903)には、人気のあるオープンソースのデバッグおよび診断ツールであるDTraceのサポートが含まれます。 もともとはSolaris用に構築されており、Linux、FreeBSD、NetBSD、およびmacOSで使用できるようになりました。 MicrosoftはそれをWindowsに移植しました。
広告
DTraceは、管理者または開発者がユーザーモードまたはカーネルモードでシステムをリアルタイムで確認できるようにする動的トレースフレームワークです。 DTraceには、トレースポイントを動的に挿入できるCスタイルの高レベルで強力なプログラミング言語があります。 これらの動的に挿入されたトレースポイントを使用して、条件やエラーでフィルタリングしたり、ロックパターンを分析するコードを記述したり、デッドロックを検出したりできます。
Windowsでは、DTraceは静的なEvent Tracing for Windows(ETW)を拡張し、実行時にプログラムでトレースポイントを挿入する機能を提供しません。
dtrace.sysで使用されるすべてのAPIと機能は、文書化された呼び出しです。
Microsoftは、Windows 10用の特別なドライバーを実装しました。これにより、多くのシステム監視の役割を実行できます。 ドライバーはWindows10バージョン1903に含まれます。 また、DTraceでは現在、カーネルデバッガーを有効にしてWindowsを起動する必要があります。
移植されたDTraceツールのソースコードはGitHubで入手できます。 「ページにアクセスしてくださいWindows上のDTrace」をGitHubのOpenDTraceプロジェクトの下に表示してください。
Windows10でDTraceをセットアップする
機能を使用するための前提条件
- Windows10インサイダー ビルド18342 以上
- でのみ利用可能 x64 Windowsで、64ビットプロセスのトレース情報のみをキャプチャします
-
WindowsInsiderプログラム は 有効 と 構成済み 有効なWindowsInsiderアカウントを使用する
- 詳細については、[設定]-> [更新とセキュリティ]-> [Windows InsiderProgram]にアクセスしてください。
手順:
-
BCD構成セット:
- bcdedit / set dtrace on
- 新しいInsiderビルドにアップグレードする場合は、bcdeditオプションを再度設定する必要があることに注意してください
-
ダウンロード からDTraceパッケージをインストールします ダウンロードセンター.
- これにより、DTraceが機能するために必要なユーザーモードコンポーネント、ドライバー、および追加機能のオンデマンドパッケージがインストールされます。
- オプション:更新 PATH環境変数 含める C:\ Program Files \ DTrace
- set PATH =%PATH%; "C:\ Program Files \ DTrace"
- 設定 シンボルパス
- シンボルをローカルにキャッシュするための新しいディレクトリを作成します。 例:mkdir c:\ symbol
- 設定 _NT_SYMBOL_PATH= srv * C:\ symbol *http://msdl.microsoft.com/download/symbols
- DTraceは、必要なシンボルをシンボルサーバーから自動的にダウンロードし、ローカルパスにキャッシュします。
-
オプション:カーネルデバッガーのセットアップ ターゲットマシンへの接続(MSDNリンク). これは それだけ FBTまたは他のプロバイダーを使用してカーネルイベントをトレースする場合に必要です。
- カーネルデバッガーをセットアップする場合は、C:でSecurebootとBitlockerを無効にする必要があることに注意してください(有効になっている場合)。
- リブート ターゲットマシン
DTraceの使用
- 開く 昇格したコマンドプロンプト.
- 次のいずれかのコマンドを実行します。
#プログラムによる5秒間のシステムコールの要約:dtrace -Fn "tick-5sec {exit(0);} syscallentry {@num [pid、execname] = count();}"#タイマーセット/キャンセルプログラムを3つ要約する seconds:dtrace -Fn "tick-3sec {exit(0);} syscall:: Nt * Timer *:entry {@ [probefunc、execname、pid] = count();}"#システムプロセスのカーネル構造をダンプ:(必須 へのシンボルパス 悩ませる) dtrace -n "BEGIN {print(*(struct nt`_EPROCESS *)nt`PsInitialSystemProcess); exit(0);}"#notepad.exeの実行時にNTFSを介してパスをトレースする(KD aが必要)
コマンド dtrace -lvn syscall syscallプロバイダーから入手可能なすべてのプローブとそのパラメーターが一覧表示されます。
以下は、Windowsで利用可能なプロバイダーの一部とそれらが装備しているものです。
- システムコール –NTOSシステムコール
- fbt (関数境界トレース)–カーネル関数のエントリと戻り値
- pid –ユーザーモードのプロセストレース。 カーネルモードのFBTと同様ですが、任意の関数オフセットの計測も可能です。
-
etw (Windowsのイベントトレース)– ETWのプローブを定義できますこのプロバイダーは、DTraceの既存のオペレーティングシステムインストルメンテーションを活用するのに役立ちます。
- これは、Windowsがすでに提供しているすべての情報を公開および取得できるようにするためにDTraceに行った追加の1つです。 ETW.
Windowsシナリオに適用できるその他のサンプルスクリプトは、こちらにあります。 サンプルディレクトリ.
ソース: マイクロソフト