從 Windows Server 2025 開始, dtrace 隨附為內建工具。 DTrace 是命令行公用程式,可讓用戶即時監視和偵錯其系統效能。 透過 dtrace,用戶可以動態檢測核心和用戶空間程序代碼,而不需要修改程序代碼本身。
這個功能強大的工具支援各種數據收集和分析技術,包括匯總、直方圖,以及追蹤用戶層級事件。 您可以在腳本中 dtrace 指定探查,其中腳本會定義要監視的探查,以及在探查引發時要採取的動作。 探查是程式代碼中可收集數據以執行這些動作的特定點。
Note
此的內建埠 dtrace 與 Windows 周邊參數和其他功能的 DTrace MSI 安裝程式不同。 若要深入瞭解 DTrace for Windows,請參閱 Windows 上的 DTrace。
如需使用 DTrace 的完整指南,請參閱 動態追蹤指南。
Enable DTrace
您 dtrace 必須先啟用才能使用。 若要啟用 dtrace,請以系統管理員身分開啟提升許可權的命令提示字元或 PowerShell,然後執行:
bcdedit /set dtrace on
需要重新啟動,此變更才會生效。
Syntax
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 的參數 區分大小寫。 請務必在指定參數時使用正確的大小寫,以避免發生任何非預期的行為。
| Parameter | Description |
|---|---|
-b <bufsz> |
設定用來儲存追蹤資料的緩衝區大小,其中 bufsz 是所需的緩衝區大小,以位元組、KB (k)、MB (m) 或 GB (g) 為單位。 |
-c <cmd> |
執行指定的命令,並在完成之後結束,其中 cmd 是您要在啟動追蹤之前執行的命令。 如果使用多個 -c 實例,則 dtrace 會在所有指令完成執行時結束,並報告每一個子處理程序的結束狀態。 |
| -C | 在執行追蹤之前,先在腳本檔案上執行 ucpp 預處理器。 |
-D <name>=<def> |
在叫用前置處理器時定義符號,其中 name 是要定義的符號名稱, 而 def 是要指派給符號的選擇性值。 |
| -e | 在編譯要求之後結束,但在啟用探查之前結束。 |
| -f | 啟用或列出符合指定函式名稱的探查。 |
| -F | 依函式結合追蹤輸出,讓您更容易分析。 |
| -h | 產生具有靜態探查定義的頭檔。 |
-我 <probe-id> |
啟用或列出符合指定探測 ID 的探測,其中 probe-id 是要追蹤的探測的識別碼。 |
-我 <path> |
將指定的目錄新增至前置處理器搜尋路徑,其中 path 是您要新增的包含 #include 檔案的目錄。 |
| -l | 根據 -P、 -m、 -f、 -n、 -i 及 -s 參數,列出符合指定準則的探測。 如果未指定這些參數,則會列出所有探查。 |
-L <path> |
將指定的目錄新增至檔案庫搜尋路徑,其中 path 是您要新增且包含一般定義的檔案庫目錄。 |
| -m | 使用格式 provider:module 或 module 啟用或列出符合引數中指定模組名稱的探測。 如果未在模組名稱之外指定限定符,則會比對具有該模組名稱的所有探查。 |
| -n | 使用 provider:module:function:name、module:function:name、function:name 或 name 格式,啟用或列出符合引數中指定探測名稱的探測。 如果未指定探查名稱以外的限定符,則會比對具有該名稱的所有探查。 |
-o <output> |
設定追蹤資料的輸出檔,其中 output 是您要用於追蹤資料的檔案名稱。 |
-p <pid> |
擷取指定的進程標識碼 (PID)並快取其符號數據表,可用來分析程序的行為。 |
-P <provider> |
啟用或列出符合指定提供者名稱的探查,其中 提供者 是提供者的名稱。 可以同時使用多個 -P 參數實例。 |
| -q | 設定無訊息模式,其只會輸出明確追蹤的數據。 |
-s <script> |
根據指定的 D Script 啟用或列出探測,其中 script 是您要執行的 Script 的名稱。 如果指定 -e ,則會編譯程式,但不會執行資料收集。 如果指定 -l ,則會編譯程式並顯示相符的探測清單,但不會執行任何資料收集。 如果未指定 -e 或 -l ,則會編譯程式,根據指定的探測執行資料收集,並開始追蹤。 |
| -S | 將 D 語言編譯器中間程式碼列印到 stderr進行偵錯。 |
-U <name> |
在叫用前置處理器時取消定義符號,其中 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 Script 的 預設 符號搜尋路徑。 |
| -Z | 允許符合零探查以進行偵錯的探查描述。 |
下列清單描述其餘的描述:
謂詞:謂詞用正斜線(
/ /)括起來,是一個D表達式,是一個布林表達式,可以引用變數、常數和函數。 述詞可用來根據這些事件篩選的dtrace輸出。 每次引發探查時,都會評估此表達式。 如果述詞評估為 true,則會執行相關聯的動作。動作: 動作會以大括弧 (
{ }) 括住,且是一組 D 語言陳述式,當探測觸發時執行,且其相關聯的述詞 (如果有的話) 評估為 true。 動作可用來列印輸出語句、記錄數據或執行其他作業,例如傳送訊號或修改變量。模組:提供者的元件,其中包含一組相關探查。 您可以在文稿中
dtrace指定模組,將腳本的範圍限制為特定模組或一組模組。Func:與探查相關聯的函式名稱。 例如,探查與函
syscall::NtReadFile式read相關聯。 您可以在文稿中dtrace指定函式,將腳本的範圍限製為特定函式或一組函式。引數:當探測觸發時傳遞至動作運算式的引數,以及其相關聯的述詞 (如果有的話) 評估為 true。 Args 可用來從探查內容擷取數據,例如函式自變數的值或系統呼叫傳回值。 Args 也可以用來在探查之間傳遞數據,或修改腳本的行為。
Examples
若要追蹤所有系統呼叫,請列印可執行文件的名稱,以及要進行的系統呼叫名稱,執行:
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 - 一行命令。