如何使用Logman擷取USB事件追蹤
本文提供使用 Logman 工具來擷取 USB ETW 事件追蹤的相關信息。 Logman 是 Windows 內建的追蹤工具。 您可以使用 Logman 將事件擷取到事件追蹤記錄檔。
必要條件
事件追蹤記錄檔可以非常快速地成長,但較小的記錄檔更容易巡覽且更容易傳輸。 開始追蹤之前,請考慮採取下列步驟,從記錄中排除無關的事件,讓您可以專注於您想要檢查的裝置活動:
- 中斷任何非相關裝置的非重要 USB 裝置連線。 較少的裝置會導致較小的追蹤,讓您更容易閱讀和分析。
- 如果您的系統具有 USB 鍵盤或滑鼠,請改用遠端桌面輸入追蹤命令。
- 盡可能縮小追蹤的開始和結尾,盡可能縮小感興趣的作業。
- 如果您只對特定類別的 USB 事件感興趣,您可以使用關鍵詞來篩選所記錄的事件。 如需詳細資訊,請參閱<備註>。
來自USB 3.0驅動程式堆疊的事件追蹤類似於Windows 7 中引進的USB 2.0驅動程式堆疊追蹤。 您可以從 USB 2.0 驅動程式堆疊擷取事件追蹤 Windows 8 電腦上。 從 USB 2.0 和 USB 3.0 驅動程式堆疊擷取事件追蹤的方式類似。 您可以從 USB 2.0 或 USB 3.0 驅動程式堆疊獨立擷取事件。 當您將 USB 2.0 裝置連線到 USB 3.0 主機控制器時,您會從 USB 3.0 驅動程式堆疊取得事件追蹤。 在此情況下,您將檢視USB 2.0裝置的新USB 3.0驅動程式堆疊事件。
指示
收集USB追蹤事件
開啟具有系統管理許可權的命令提示字元視窗。 若要這樣做,請選取 [開始],在搜尋方塊中輸入 cmd ,選取並保留 (或以滑鼠右鍵按兩下 [) cmd.exe],然後選取 [ 以系統管理員身分執行]。
在命令提示字元視窗中,輸入下列命令以啟動擷取工作階段:
logman create trace -n usbtrace -o %SystemRoot%\Tracing\usbtrace.etl -nb 128 640 -bs 128 logman update trace -n usbtrace -p Microsoft-Windows-USB-USBXHCI (Default,PartialDataBusTrace) logman update trace -n usbtrace -p Microsoft-Windows-USB-UCX (Default,PartialDataBusTrace) logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB3 (Default,PartialDataBusTrace) logman update trace -n usbtrace -p Microsoft-Windows-USB-USBPORT logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB logman update trace -n usbtrace -p Microsoft-Windows-Kernel-IoTrace 0 2 logman start -n usbtrace
在上述每個命令完成之後,Logman 會顯示
The command completed successfully.
執行您想要擷取的作業。 例如,若要擷取裝置列舉的事件,您可以在 裝置管理員 中插入顯示為「未知裝置」的 USB 快閃磁碟驅動器。 讓命令提示字元視窗保持開啟。
完成案例之後,請停止會話。 輸入下列命令以結束擷取工作階段:
您可以執行下列命令來停止 USB 中樞和連接埠事件收集:
logman stop -n usbtrace logman delete -n usbtrace move /Y %SystemRoot%\Tracing\usbtrace_000001.etl %SystemRoot%\Tracing\usbtrace.etl
上述擷取會話會產生名為 usbtrace.etl 的 etl 檔案。 追蹤檔案儲存在 %SystemRoot%\Tracing\usbtrace.etl (C:\Windows\Tracing\usbtrace.etl) 。 將檔案移至另一個位置或重新命名,以避免在擷取下一個會話時加以覆寫。
檔案包含來自 USB 3.0 和 USB 2.0 驅動程式堆疊的事件追蹤。 如果您想要將事件追蹤減少為只有一個 USB 驅動程式堆疊,請從下一個追蹤會話中移除另一個驅動程式堆疊。 您可以修改步驟 2 所示的命令順序,以移除對應至您想要從追蹤會話中移除之驅動程式堆棧的 “logman update” 行。
備註
擷取 USB 3.0 驅動程式堆疊事件的篩選
請注意 Logman 擷取命令中的 ETW 關鍵詞,例如 Default 和 PartialDataBusTrace 。 這些字是 ETW 關鍵詞,指出您想要檢視的事件類型。 您可以使用 ETW 關鍵詞來篩選 USB 驅動程式寫入追蹤記錄的事件,並自定義您想要檢視從 USB 3.0 驅動程式堆棧擷取的事件有多少資訊。 系統會儲存符合任何關鍵詞的事件。 請注意,這個篩選方法可用於擷取時間,而不是在分析期間使用。
您可以根據您的需求,根據關鍵詞篩選事件。 以下是篩選 USB 3.0 驅動程式堆疊事件的關鍵詞:
ETW 關鍵詞 | 描述 |
---|---|
預設值 | 顯示適用於一般疑難解答的事件。 這些事件類似於 USB 2.0 ETW 事件,但不包含任何 USB 傳輸事件。 |
StateMachine | 顯示驅動程式內部狀態機器轉換。 事件不會包含在 Default 關鍵詞中。 |
破舊 | 顯示追蹤開頭的裝置資訊事件,並擷取USB樹狀結構的開始狀態。 儲存裝置資訊 Rundown 事件很重要,因此追蹤包含連線裝置的詳細數據,例如 USB 描述項和 USB 裝置描述。 這些事件包含在 Default 關鍵詞中。 當您不使用 Default 關鍵詞時,應該使用 Rundown 關鍵詞。 其餘的 Rundown 事件會提供驅動程式內部狀態機器最近的狀態轉換資訊。 這些事件包含在 StateMachine 關鍵詞中。 |
電源 | 顯示 Default 事件的子集。 顯示裝置電源轉換事件。 |
IRP | 顯示 Default 事件的子集。 事件會顯示來自客戶端驅動程式的 IRP,以及使用者模式要求所產生的 IRP。 不過,IRP 關鍵詞不會顯示有效的 USB 傳輸 (URB) 要求,而且需要 HeadersBusTrace、PartialDataBusTrace 或 FullDataBusTrace 才能顯示。 |
HeadersBusTrace | 顯示所有 USB 傳輸事件,但不會儲存數據封包。 |
PartialDataBusTrace | 顯示所有 USB 傳輸事件,並儲存有限的總線數據承載。 |
FullDataBusTrace | 顯示所有 USB 傳輸事件,並儲存最多 4 KB 的總線數據,以進行大量、中斷和控制傳輸。 請注意,只會記錄鏈結 MDL 的第一個緩衝區。 雖然 URB_ISOCH_TRANSFER 要求結構儲存) ,但永遠不會記錄 (等時總線數據。 如需詳細資訊,請參閱 如何傳送鏈結的 MDL 和 如何將數據傳輸至 USB 等時點。 |
HWVerifyHost | 顯示 Default 事件的子集。 事件會指出 USB 主機控制器硬體發生錯誤的時間。 |
HWVerifyHub | 顯示 Default 事件的子集。 事件會指出 USB 中樞硬體發生錯誤的時間。 |
HWVerifyDevice | 顯示 Default 事件的子集。 事件會指出 USB 裝置硬體發生錯誤的時間。 |
例如,以下是啟動會話以擷取 USB 裝置電源轉換的命令序列。 由於選取提供者 (USB 3.0 驅動程式堆疊) ,因此只會針對 USB 3.0 主機控制器下游連線的裝置擷取事件。
logman create trace -n usbtrace -o %SystemRoot%\Tracing\usbtrace.etl -nb 128 640 -bs 128
logman update trace -n usbtrace -p Microsoft-Windows-USB-USBXHCI (Rundown,Power)
logman update trace -n usbtrace -p Microsoft-Windows-USB-UCX (Rundown,Power)
logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB3 (Rundown,Power)
logman update trace -n usbtrace -p Microsoft-Windows-Kernel-IoTrace 0 2
logman start -n usbtrace
擷取電源事件的篩選
USB 裝置的實用 ETW 關鍵詞是 USB 埠驅動程式的 PowerDiagnostics 旗標。 當您使用此關鍵詞時,埠驅動程式會記錄主機控制器和端點資訊,但省略描述傳輸的所有事件。 如果您不需要查看傳輸事件,您可以使用PowerDiagnostics 關鍵詞將追蹤記錄的大小減少為85%。 當您啟動追蹤時,請指定 PowerDiagnostics 關鍵詞,如下列範例所示:
Logman start Usbtrace -p Microsoft-Windows-USB-USBPORT PowerDiagnostics -o usbtrace.etl -ets -nb 128 640 -bs 128
Logman update Usbtrace -p Microsoft-Windows-USB-USBHUB –ets
如果您的篩選追蹤記錄有許多主機控制器異步排程啟用和停用事件,您可以使用 Netmon 篩選來檢視記錄檔時加以篩選,如下列範例所示:
NOT (Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Host Controller Async Schedule Enable"
OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Host Controller Async Schedule Disable")
如需 Netmon 篩選器的詳細資訊,請參閱 案例研究:使用 ETW 和 Netmon 針對未知的 USB 裝置進行疑難解答。
有時候,在您的追蹤記錄檔中擁有傳輸事件會很有説明,例如中樞要求和裝置要求,導致 XACT 錯誤或停止等錯誤。 您可以先擷取記錄檔,而不需要傳輸事件,並分析較小的記錄檔。 然後在您對問題案例中問題有一般了解之後,再次執行追蹤而不進行篩選。