共用方式為


如何使用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追蹤事件

  1. 開啟具有系統管理許可權的命令提示字元視窗。 若要這樣做,請選取 [開始],在搜尋方塊中輸入 cmd ,選取並保留 (或以滑鼠右鍵按兩下 [) cmd.exe],然後選取 [ 以系統管理員身分執行]。

  2. 在命令提示字元視窗中,輸入下列命令以啟動擷取工作階段:

    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.

  3. 執行您想要擷取的作業。 例如,若要擷取裝置列舉的事件,您可以在 裝置管理員 中插入顯示為「未知裝置」的 USB 快閃磁碟驅動器。 讓命令提示字元視窗保持開啟。

  4. 完成案例之後,請停止會話。 輸入下列命令以結束擷取工作階段:

    您可以執行下列命令來停止 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 關鍵詞,例如 DefaultPartialDataBusTrace 。 這些字是 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) 要求,而且需要 HeadersBusTracePartialDataBusTrace 或 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 錯誤或停止等錯誤。 您可以先擷取記錄檔,而不需要傳輸事件,並分析較小的記錄檔。 然後在您對問題案例中問題有一般了解之後,再次執行追蹤而不進行篩選。