다음을 통해 공유


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 캡처 명령에서 DefaultPartialDataBusTrace 와 같은 ETW 키워드를 확인합니다. 이러한 단어는 보려는 이벤트 유형을 나타내는 ETW 키워드입니다. ETW 키워드를 사용하여 USB 드라이버가 추적 로그에 쓰는 이벤트를 필터링하고 USB 3.0 드라이버 스택에서 캡처된 이벤트에 대해 보려는 정보의 양을 사용자 지정할 수 있습니다. 키워드와 일치하는 이벤트가 저장됩니다. 이 필터링 방법은 분석 중에가 아니라 캡처 시간에 사용하기 위한 것입니다.

요구 사항에 따라 키워드를 기반으로 이벤트를 필터링할 수 있습니다. USB 3.0 드라이버 스택 이벤트를 필터링하기 위한 키워드는 다음과 같습니다.

ETW 키워드(keyword) Description
기본값 일반적인 문제 해결에 유용한 이벤트를 표시합니다. 이벤트는 USB 2.0 ETW 이벤트와 유사하지만 USB 전송 이벤트는 포함하지 않습니다.
StateMachine 드라이버 내부 상태 컴퓨터 전환을 표시합니다. 이벤트는 기본 키워드(keyword) 포함되지 않습니다.
런다운 추적 시작 부분에 디바이스 정보 이벤트를 표시하고 USB 트리의 시작 상태를 캡처합니다. 추적에 연결된 디바이스의 USB 설명자 및 USB 디바이스 설명과 같은 세부 정보가 포함되도록 디바이스 정보 런다운 이벤트를 저장하는 것이 중요합니다. 이러한 이벤트는 기본 키워드(keyword) 포함됩니다. 기본 키워드(keyword) 사용하지 않는 경우 Rundown 키워드(keyword) 사용해야 합니다. 나머지 Rundown 이벤트는 드라이버 내부 상태 컴퓨터의 최근 상태 전환에 대한 정보를 제공합니다. 이러한 이벤트는 StateMachine 키워드(keyword) 포함됩니다.
Power 기본 이벤트의 하위 집합을 표시합니다. 디바이스 전원 전환 이벤트를 표시합니다.
IRP 기본 이벤트의 하위 집합을 표시합니다. 이벤트는 사용자 모드 요청으로 인해 발생하는 클라이언트 드라이버 및 IRP의 IRP를 표시합니다. 그러나 유효한 URB(USB 전송) 요청은 IRP 키워드(keyword) 표시되지 않으며 표시하려면 HeadersBusTrace, PartialDataBusTrace 또는 FullDataBusTrace가 필요합니다.
HeadersBusTrace 모든 USB 전송 이벤트를 표시하지만 데이터 패킷은 저장하지 않습니다.
PartialDataBusTrace 모든 USB 전송 이벤트를 표시하고 제한된 버스 데이터 페이로드를 저장합니다.
FullDataBusTrace 모든 USB 전송 이벤트를 표시하고 대량, 인터럽트 및 제어 전송을 위해 최대 4KB의 버스 데이터를 저장합니다. 연결된 MDL의 첫 번째 버퍼만 기록됩니다. 등시 버스 데이터는 기록되지 않습니다( URB_ISOCH_TRANSFER 요청 구조가 저장됨). 자세한 내용은 연결된 MDL을 보내는 방법USB 등시 엔드포인트로 데이터를 전송하는 방법을 참조하세요.
HWVerifyHost 기본 이벤트의 하위 집합을 표시합니다. 이벤트는 USB 호스트 컨트롤러 하드웨어에서 오류가 발생하는 경우를 나타냅니다.
HWVerifyHub 기본 이벤트의 하위 집합을 표시합니다. 이벤트는 USB 허브 하드웨어에서 오류가 발생하는 경우를 나타냅니다.
HWVerifyDevice 기본 이벤트의 하위 집합을 표시합니다. 이벤트는 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 키워드(keyword) USB 포트 드라이버의 PowerDiagnostics 플래그입니다. 이 키워드(keyword) 사용하는 경우 포트 드라이버는 호스트 컨트롤러 및 엔드포인트 정보를 기록하지만 전송을 설명하는 모든 이벤트를 생략합니다. 전송 이벤트를 볼 필요가 없는 경우 PowerDiagnostics 키워드(keyword) 사용하여 추적 로그의 크기를 85%까지 줄일 수 있습니다. 다음 예제와 같이 추적을 시작할 때 PowerDiagnostics 키워드(keyword) 지정합니다.

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 디바이스 문제 해결의 "USB Netmon 필터"를 참조하세요.

경우에 따라 XACT 오류 또는 중단과 같은 오류를 초래하는 허브 요청 및 디바이스 요청과 같은 추적 로그에 전송 이벤트를 포함하는 것이 도움이 됩니다. 먼저 전송 이벤트 없이 로그를 캡처하고 더 작은 로그를 분석할 수 있습니다. 그런 다음, 문제 시나리오의 문제를 일반적으로 이해한 후 필터링하지 않고 추적을 다시 실행합니다.