從 Windows Server 2025 開始, dtrace
隨附為內建工具。 DTrace 是命令行公用程式,可讓用戶即時監視和偵錯其系統效能。 透過 dtrace
,用戶可以動態檢測核心和用戶空間程序代碼,而不需要修改程序代碼本身。
這個功能強大的工具支援各種數據收集和分析技術,包括匯總、直方圖,以及追蹤用戶層級事件。 您可以在腳本中 dtrace
指定探查,其中腳本會定義要監視的探查,以及在探查引發時要採取的動作。 探查是程式代碼中可收集數據以執行這些動作的特定點。
備註
此的內建埠 dtrace
與 Windows 周邊參數和其他功能的 DTrace MSI 安裝程式不同。 若要深入瞭解 DTrace for Windows,請參閱 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 是所需的緩衝區大小,以位元組、KB (k)、MB (m) 或 GB (g) 為單位。 |
-c <cmd> |
執行指定的命令,並在完成之後結束,其中 cmd 是您想要在啟動追蹤之前執行的命令。 如果使用多個 -c 實例,當所有命令都執行完畢並報告每個子進程的結束狀態時,dtrace 就會結束。 |
-C | 在執行追蹤之前,先在腳本檔案上執行 ucpp 預處理器。 |
-D <name> =<def> |
叫用預處理器時定義符號,其中 name 是要定義的符號名稱, def 是指派給符號的選擇性值。 |
-e | 在編譯要求之後結束,但在啟用探查之前結束。 |
-f | 啟用或列出符合指定函式名稱的探查。 |
-F | 依函式結合追蹤輸出,讓您更容易分析。 |
-h | 產生具有靜態探查定義的頭檔。 |
-我 <probe-id> |
啟用或列出符合指定探查標識符的探查,其中 probe-id 是要追蹤之探查的標識符。 |
-我 <path> |
將指定的目錄新增至預處理器搜尋路徑,其中 path 是您要新增的目錄,其中包含 #include 檔案。 |
-l | 列出根據 -P、 -m、 -f、 -n、 -i 和 -s 參數比對指定準則的探查。 如果未指定這些參數,則會列出所有探查。 |
-L <path> |
將指定的目錄新增至連結庫搜尋路徑,其中 path 是您要新增且包含一般定義的連結庫目錄。 |
-米 | 使用 provider:module 或 module 格式,啟用或列出符合自變數中指定模組名稱的探查。 如果未在模組名稱之外指定限定符,則會比對具有該模組名稱的所有探查。 |
-n | 使用 provider:module:function:name、module:function:name、function:name、function:name 或 name 格式,啟用或列出符合自變數中指定探查名稱的探查。 如果未指定探查名稱以外的限定符,則會比對具有該名稱的所有探查。 |
-o <output> |
設定追蹤資料的輸出檔案,其中 output 是您要用於追蹤資料的檔名。 |
-p <pid> |
擷取指定的進程標識碼 (PID)並快取其符號數據表,可用來分析程序的行為。 |
-P <provider> |
啟用或列出符合指定提供者名稱的探查,其中 provider 是提供者 的名稱。 - P 參數的多個實例可以同時使用。 |
-q | 設定無訊息模式,其只會輸出明確追蹤的數據。 |
-s <script> |
根據指定的 D 腳本啟用或列出探查,其中 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 文本 的預設 符號搜尋路徑。 |
-Z | 允許符合零探查以進行偵錯的探查描述。 |
下列清單描述其餘的描述:
述詞:述詞會以正斜線 (
/ /
) 括住,而且是 D-expression,這是可參考變數、常數和函式的布爾表達式。 述詞可用來根據這些事件篩選的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 - 一行命令。