Condividi tramite


Come acquisire una traccia eventi USB con Logman

Questo articolo fornisce informazioni sull'uso dello strumento Logman per acquisire una traccia eventi ETW USB. Logman è uno strumento di traccia integrato in Windows. È possibile usare Logman per acquisire eventi in un file di log di traccia eventi.

Prerequisiti

I file di log di traccia eventi possono aumentare molto rapidamente, ma un file di log più piccolo è più semplice da esplorare e semplificare la trasmissione. Prima di avviare una traccia, prendere in considerazione la procedura seguente per escludere eventi estranei dal log in modo da poter concentrarsi sull'attività del dispositivo da esaminare:

  • Disconnettere tutti i dispositivi USB non critici che non sono il dispositivo di interesse. Un minor numero di dispositivi comporta tracce più piccole che semplificano la lettura e l'analisi.
  • Se il sistema ha una tastiera USB o un mouse, immettere invece i comandi di traccia usando Desktop remoto.
  • Restringere l'inizio e la fine della traccia il più possibile intorno alle operazioni di interesse.
  • Se si è interessati solo a una determinata categoria di eventi USB, è possibile usare parole chiave per filtrare gli eventi registrati. Per altre informazioni, vedere la sezione Osservazioni.

Le tracce degli eventi dello stack di driver USB 3.0 sono simili alle tracce dello stack di driver USB 2.0, introdotte in Windows 7. Le tracce degli eventi dallo stack di driver USB 2.0 possono essere acquisite in un computer Windows 8. Il modo in cui si acquisisce tracce di eventi da stack di driver USB 2.0 e USB 3.0 è simile. È possibile acquisire eventi dallo stack di driver USB 2.0 o USB 3.0 in modo indipendente. Quando si connette un dispositivo USB 2.0 a un controller host USB 3.0, si ottengono tracce di eventi dallo stack di driver USB 3.0. In questo caso, verranno visualizzati nuovi eventi dello stack di driver USB 3.0 per un dispositivo USB 2.0.

Istruzioni

Per raccogliere eventi di traccia USB

  1. Aprire una finestra del prompt dei comandi con privilegi amministrativi. A tale scopo, selezionare Start, digitare cmd nella casella di ricerca, Selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) cmd.exe e quindi selezionare Esegui come amministratore.

  2. Nella finestra del prompt dei comandi immettere questi comandi per avviare una sessione di acquisizione:

    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
    
    

    Al termine di ognuno di questi comandi, Logman visualizza The command completed successfully.

  3. Eseguire le operazioni da acquisire. Ad esempio, per acquisire eventi per l'enumerazione del dispositivo, è possibile collegare un'unità flash USB che viene visualizzata come "Dispositivo sconosciuto" in Gestione dispositivi. Mantenere aperta la finestra del prompt dei comandi.

  4. Arrestare la sessione dopo aver completato lo scenario. Immettere questi comandi per terminare la sessione di acquisizione:

    È possibile arrestare la raccolta di eventi dell'hub USB e della porta eseguendo il comando seguente:

    logman stop -n usbtrace
    logman delete -n usbtrace
    move /Y %SystemRoot%\Tracing\usbtrace_000001.etl %SystemRoot%\Tracing\usbtrace.etl
    
    

La sessione di acquisizione precedente genera un file etl denominato usbtrace.etl. Il file di traccia viene archiviato in %SystemRoot%\Tracing\usbtrace.etl (C:\Windows\Tracing\usbtrace.etl). Spostare il file in un altro percorso o rinominarlo per evitare di sovrascriverlo quando si acquisisce la sessione successiva.

Il file contiene tracce di eventi dagli stack di driver USB 3.0 e USB 2.0. Se si desidera ridurre le tracce degli eventi a un solo stack di driver USB, rimuovere l'altro stack di driver dalla sessione di traccia successiva. A tale scopo, modificare la sequenza di comando illustrata nel passaggio 2 per rimuovere le righe di "aggiornamento logman" corrispondenti allo stack di driver da rimuovere dalla sessione di traccia.

Commenti

Filtri di acquisizione per gli eventi dello stack di driver USB 3.0

Si notino parole chiave ETW, ad esempio Default e PartialDataBusTrace nei comandi di acquisizione di Logman. Queste parole sono parole chiave ETW che indicano i tipi di eventi da visualizzare. È possibile usare le parole chiave ETW per filtrare gli eventi scritti dai driver USB in un log di traccia e personalizzare la quantità di informazioni da visualizzare sugli eventi acquisiti dallo stack di driver USB 3.0. Gli eventi che corrispondono a una delle parole chiave vengono salvati. Si noti che questo metodo di filtro è destinato all'uso in fase di acquisizione, non durante l'analisi.

È possibile filtrare gli eventi in base alle parole chiave in base alle esigenze. Ecco le parole chiave per filtrare gli eventi dello stack di driver USB 3.0:

Parola chiave ETW Descrizione
Default Mostra gli eventi utili per la risoluzione dei problemi generali. Gli eventi sono simili agli eventi ETW USB 2.0, ma non includono eventi di trasferimento USB.
StateMachine Mostra le transizioni della macchina a stati interna del driver. Gli eventi non sono inclusi nella parola chiave Default .
Fatiscente Mostra gli eventi di informazioni sul dispositivo all'inizio della traccia e acquisisce lo stato iniziale dell'albero USB. Le informazioni sul dispositivo Gli eventi Rundown sono importanti per salvare in modo che la traccia contenga dettagli, ad esempio i descrittori USB e la descrizione del dispositivo USB, dei dispositivi connessi. Questi eventi sono inclusi nella parola chiave Default . Quando non si usa la parola chiave Default , è consigliabile usare la parola chiave Rundown . Gli eventi Rundown rimanenti forniscono informazioni sulle transizioni di stato recenti delle macchine a stati interne del driver. Questi eventi sono inclusi nella parola chiave StateMachine .
Elettricità Mostra un subset di eventi Default . Mostra gli eventi di transizione alimentazione del dispositivo.
IRP Mostra un subset di eventi Default . Gli eventi mostrano i runtime di integrazione dal driver client e dai provider di integrazione risultanti dalle richieste in modalità utente. Tuttavia, le richieste di trasferimento USB valide non vengono visualizzate con la parola chiave IRP e richiedono HeadersBusTrace, PartialDataBusTrace o FullDataBusTrace per essere visualizzate.
HeadersBusTrace Mostra tutti gli eventi di trasferimento USB, ma non salva i pacchetti di dati.
PartialDataBusTrace Mostra tutti gli eventi di trasferimento USB e salva un payload limitato dei dati del bus.
FullDataBusTrace Mostra tutti gli eventi di trasferimento USB e salva fino a 4 KB di dati del bus per trasferimenti bulk, interrupt e controllo. Si noti che viene registrato solo il primo buffer di un MDL concatenato. I dati del bus isocroni non vengono mai registrati (anche se la struttura della richiesta di URB_ISOCH_TRANSFER viene salvata). Per altre informazioni, vedere How to send chained MDLs (Come inviare mdls concatenati ) e How to transfer data to USB isochronous endpoints (Come inviare mdl concatenati) e How to transfer data to USB isochronous endpoints (Come trasferire i dati agli endpoint isocroni USB).
HWVerifyHost Mostra un subset di eventi Default . Gli eventi indicano quando si verifica un errore nell'hardware del controller host USB.
HWVerifyHub Mostra un subset di eventi Default . Gli eventi indicano quando si verifica un errore nell'hardware dell'hub USB.
HWVerifyDevice Mostra un subset di eventi Default . Gli eventi indicano quando si verifica un errore nell'hardware del dispositivo USB.

Ecco ad esempio una sequenza di comandi che avviano una sessione per acquisire transizioni di alimentazione del dispositivo USB. A causa della selezione di provider (stack di driver USB 3.0), gli eventi vengono acquisiti solo per i dispositivi connessi downstream di un controller host 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

Acquisire filtri per gli eventi di risparmio energia

Una parola chiave ETW utile per i dispositivi USB è il flag PowerDiagnostics del driver della porta USB. Quando si usa questa parola chiave, il driver di porta registra le informazioni sul controller host e sull'endpoint, ma omette tutti gli eventi che descrivono i trasferimenti. Se non è necessario visualizzare gli eventi di trasferimento, è possibile usare la parola chiave PowerDiagnostics per ridurre le dimensioni di un log di traccia fino all'85%. Specificare la parola chiave PowerDiagnostics all'avvio della traccia, come illustrato nell'esempio seguente:

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

Se il log di traccia filtrato include molti eventi di abilitazione e disabilitazione della pianificazione asincrona del controller host, è possibile filtrarli quando si visualizza il log usando un filtro Netmon, come illustrato nell'esempio seguente:

NOT (Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Host Controller Async Schedule Enable"
OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Host Controller Async Schedule Disable")

Per altre informazioni sui filtri Netmon, vedere "Filtri USB Netmon" in Case Study: Risoluzione dei problemi di un dispositivo USB sconosciuto tramite ETW e Netmon.

In alcuni casi è utile disporre degli eventi di trasferimento nel log di traccia, ad esempio richieste hub e richieste del dispositivo che generano errori, ad esempio un errore XACT o un blocco. È possibile acquisire prima un log senza gli eventi di trasferimento e analizzare il log più piccolo. Eseguire quindi di nuovo la traccia senza filtrare dopo avere una conoscenza generale dei problemi nello scenario del problema.