Windows上のDTraceは、ARM64をサポートする20H1アップデートを受け取ります
DTraceは、人気のあるオープンソースのデバッグおよび診断ツールです。 もともとはSolaris用に構築されており、Linux、FreeBSD、NetBSD、およびmacOSで使用できるようになりました。 MicrosoftはそれをWindowsに移植し、20H1機能の更新で更新の一部を追加しています。
広告
DTraceは、管理者または開発者がユーザーモードまたはカーネルモードのいずれかでシステムをリアルタイムで確認できるようにする動的トレースフレームワークです。 DTraceには、トレースポイントを動的に挿入できるCスタイルの高レベルで強力なプログラミング言語があります。 これらの動的に挿入されたトレースポイントを使用して、条件やエラーのフィルタリング、ロックパターンの分析、デッドロックの検出などのコードを記述できます。
Windowsでは、DTraceは静的なイベントトレースfor Windows(ETW)を拡張し、実行時にプログラムでトレースポイントを挿入する機能を提供しません。
dtrace.sysで使用されるすべてのAPIと機能は、文書化された呼び出しです。
Microsoftは、Windows 10用の特別なドライバーを実装しており、これにより、多数のシステム監視の役割を実行できます。 ドライバーは、バージョン1903以降のWindows10に組み込まれています。
Windows 10 Insider Build 19041.21以降、DTraceには次の改善が加えられています。
ARM64プレビュー
はい、そうです! DTraceは、プレビューモードでARM64をサポートするようになりました。 ARM64 MSIは、上記のダウンロードリンクから入手できます。
あなたはあなたにそれを使うことができます Surface Pro X 最新のWindows10 Insider Preview(20H1)ビルドを実行します。 19041.21.
Surface ProXのDTrace
ユーザーモードStackwalk
プレビューでは、DTraceのスタックウォーク機能はカーネルモード(スタック)に制限されていました。 このアップデートでは、ユーザーモードスタックウォーク機能のサポートが追加されています(
ustack)。 スタックと同様に、ustack機能はオープンソースのDTrace仕様と完全に互換性があります。 フレーム(深さ)とサイズ(今のところ無視されています)またはvoidを指定することにより、3つの方法で呼び出すことができます。- Ustack(nframes、size)
- Ustack(nframes)
- Ustack()
ustack()は、プローブが起動したときに呼び出し元フレームのアドレスを判別できますが、スタックフレームは ustack()アクションがDTraceコンシューマーによってユーザーモードで処理されるまで、シンボルに変換されません。 シンボルのダウンロードにより、出力が遅くなる可能性があります。 したがって、以下のようにローカルにキャッシュされたシンボルでこの機能を使用することをお勧めします。
dtrace -n "profile-1ms / arg1 / {ustack(50、0); exit(0);} "-y C:\ symbols。 dtrace:description'profile-1ms 'は1つのプローブに一致しました。 CPU ID機能:名前0 3802:profile-1ms ntdll`ZwAllocateVirtualMemory + 0x14 ntdll`RtlAllocateHeap + 0x3ded ntdll`RtlAllocateHeap + 0x763 ucrtbase`malloc_base + 0x44
ライブダンプのサポート
Windowsは一般的に呼ばれるものを使用します ライブダンプ 問題をすばやく診断するのに役立ちます。 ライブダンプは、ダウンタイムなしで複数のプロセスに関連する問題やシステム全体の問題のトラブルシューティングに役立ちます。 20H1では、Windows上のDTraceを使用して、Dスクリプト内からライブダンプをキャプチャすることができます。 lkd() DTraceファシリティ。 この機能の一般的な使用例は、エラーパス(リターンコードが障害を示しているなど)を計測し、高度な診断のために障害ポイントでライブダンプをキャプチャすることです。 ライブダンプサポートの詳細については、を参照してください。 DTraceライブダンプ.
dtrace -wn "syscallreturn {if(arg0!= 0xc0000001UL){lkd(0); printf(\ "ライブダンプのトリガー\ n \"); exit(0); }}" dtrace:description'syscallreturn 'は1411プローブに一致しました。 dtrace:破壊的なアクションを許可します。 CPU ID機能:名前0 181 NtDeviceIoControlFile:returnトリガーライブダンプディレクトリc:\ Windows \ LiveKernelReportsドライブCのボリュームにラベルがありません。 ボリュームシリアル番号は70F4-B9F6ディレクトリのc:\ Windows \ LiveKernelReports 11/05/2019 05:20 PM<DIR>. 2019年11月5日午後5時20分 <DIR>.. 2019年11月5日午後5時19分 <DIR> DTRACE。 11/05/2019 05:20 PM 53,395,456DTRACE-20191105-1720.dmp。
ETWトレース
ETWトレース Windowsでデバッグするために最も頻繁に使用されるツールです。 Windows 19H1プレビューのDTraceで、トレースログおよびマニフェストイベントをインストルメント化するためのサポートを追加しました。 ETWプロバイダー.
20H1では、この機能をさらに拡張して、Dスクリプト内からその場で新しいETWイベントを作成します。 ETW_Trace() 施設。 これは、既存のETWイベントが不十分で、本番コードを変更せずにETWトレースポイントを追加したい場合に役立ちます。
詳細については ETW_Trace 施設と ETWプロバイダー、 見る DTrace ETW.
/ * GitHub ETWプロバイダーのサンプル(以下のリンク)を実行して、ノードのメモリ情報イベントを出力します。 https://github.com/microsoft/DTrace-on-Windows/blob/master/samples/windows/etw/numamemstats.d. * / dtrace -qs numamemstats.dパーティションID:0。 カウント:1。 ノード番号:1。 m_nodeinfo {uint64_t TotalPageCount = 0x1fb558 uint64_t SmallFreePageCount = 0x41 uint64_t SmallZeroPageCount = 0 uint64_t MediumFreePageCount = 0 uint64_t MediumZeroPageCount = 0 uint64_t LargeFreePageCount = 0 uint64_t LargeZeroPageCount = 0 uint64_t HugeFreePageCount = 0 uint64_t HugeZeroPageCount = 0。 }
DTraceのインストールに興味がある場合は、その方法を確認してください。 ここ.
更新されたDTraceMSIパッケージをダウンロードできます ここから.
はい、これ ソースコード と 高度なスクリプト.
ソース