Riprodurre l'errore di test eseguendo il test dalla riga di comando
A volte è utile riprodurre gli errori di test eseguendo i test dalla riga di comando. La documentazione seguente presuppone che Hardware Lab Kit (HLK) sia già stato installato nel computer controller.
Eseguire un test dei concetti fondamentali del dispositivo dalla riga di comando
Per eseguire un test dei concetti fondamentali del dispositivo dalla riga di comando:
Creare una cartella c:\temp nel sistema sottoposto a test (SUT).
Copiare tutti i file dalla \\< cartella hckcontroller>\taefbinaries\<arch> in c:\temp sul SUT.
Dove <hckcontroller è il nome del controller Windows Hardware Lab Kit (Windows HLK) e <arch> è la piattaforma SUT.
Per installare e avviare il servizio TAEF , digitare i comandi seguenti da un prompt dei comandi:
Passare alla cartella "temp" creata in precedenza:
In X86 o X64: cd c:\temp
In Arm o Arm64: cd c:\temp\MinTe
wex.services.exe /install:Te.Service
sc start Te.Service
Copiare tutti i file dalla \\< directory hckcontroller>\tests\<arch>\Dev Fund\ in c:\temp.
Modificare la directory in c:\temp ed eseguire il comando seguente (si noti che Te.exe si trova in c:\temp\MinTe in Arm e Arm64):
c:\temp\Te.exe Devfund_<testname>.dll /name:"<test case name>" /p:"DQ=DeviceID='<Device Instance Path of device under test from Device Manager>'" /RebootStateFile:state.xml
Dove <il nome> del test case è il nome del test nel file binario di test.
L'opzione /name è facoltativa. Poiché alcuni file binari di test contengono più test, l'opzione /name specifica quali test devono essere eseguiti. Se non specificato, tutti i test contenuti nel file binario di test vengono eseguiti in sequenza. È possibile ottenere l'elenco dei test in un file binario di test eseguendo il comando seguente:
Te.exe Devfund_<testname>.dll /list
Ad esempio, il Devfund_PnPDTest.dll contiene la maggior parte dei test correlati al PnP:
c:\temp>Te.exe Devfund_PnPDTest.dll /list Test Authoring and Execution Framework v10.21 for x64 c:\temp\Devfund_PnPDTest.dll PNPDTest PNPDTest::PNPDisableAndEnableDevice PNPDTest::PNPRemoveAndRestartDevice PNPDTest::PNPCancelRemoveDevice PNPDTest::PNPCancelStopDevice PNPDTest::PNPTryStopAndRestartDevice PNPDTest::PNPTryStopDeviceRequestNewResourcesAndRestartDevice PNPDTest::PNPTryStopDeviceAndFailRestart PNPDTest::PNPSurpriseRemoveAndRestartDevice PNPDTest::PNPDIFRemoveAndRescanParentDevice PNPDTest::DisableEnhancedDeviceTestingSupport
Il comando per eseguire un singolo test da questo file binario di test potrebbe essere simile al seguente:
c:\temp\Te.exe Devfund_PnPDTest.dll.dll /name:PNPDTest::PNPSurpriseRemoveAndRestartDevice /p:"DQ=DeviceID='my\device\id'" /RebootStateFile:state.xml
Il nome del test nel file binario di test non corrisponderà esattamente al titolo del test. Per un mapping dei nomi binari di test ai nomi di test HLK, vedere Test Device.DevFund.
Come usare /BreakOnError per eseguire l'interruzione nel debugger
Se l'attività "Esegui test" in un test Dei concetti fondamentali del dispositivo ha esito negativo e si vuole esaminare lo stato del sistema nel debugger del kernel contemporaneamente al log di un errore, è possibile eseguire il test manualmente da un prompt dei comandi insieme al debugger del kernel e passare l'opzione della riga di comando /BreakOnError a Te.exe.
L'esecuzione di Te.exe con l'opzione /BreakOnError causa l'interruzione del sistema nel debugger del kernel quando il test è pronto per registrare un errore. Per altre informazioni sulla configurazione di un debugger del kernel, vedere Configurazione manuale del debug Kernel-Mode.
Per eseguire un test Device Fundamentals con l'opzione /BreakOnError , aggiungere l'opzione come illustrato di seguito:
Run c:\temp\Te.exe Devfund_<testname>.dll /p:"DQ=DeviceID='<Device Instance Path of device under test from Device Manager>'" /RebootStateFile:state.xml /BreakOnError /name:"*<test case name>*"
Dove <il nome> del test case è il nome del test.
Scenario di debug di esempio
È possibile analizzare l'errore seguente eseguendo nuovamente il test e facendo in modo che il sistema si interrompa nel debugger quando il test registra l'errore in fase di rieseguimento.
WDTF_FUZZTEST : INFO : Running IOCTL Fuzzing Test on surface \DosDevices\usb#vid_045e&pid_f0ca&mi_00#7&12099dde&0&0000#{0b9f1048-b94b-dc9a-4ed7-fe4fed3a0deb}\{8de0ff21-6c06-4c27-bfe0-e62612c015ae}. Access Mode=NO SYNC. Open Type=TREE_CONNECT. Opened with access 1201bf
WDTF_FUZZTEST : ERROR : Test thread exceeded timeout limit. Terminating thread
WDTF_FUZZTEST : ERROR : Last logged operation: ZwDeviceIoControlFile, CtrlCode=0x22e10b, InBuf=0xfffffc00, 0 OutBuf=0xfffffc00, 0
WDTF_FUZZTEST : INFO : Successfully terminated test thread.
È possibile impostare un punto di interruzione nel debugger usando il comando seguente:
Te.exe Devfund_FuzzTest_WLK_Certification.dll /p:"DQ=DeviceID='USB\VID_045E&PID_F0CA&MI_00\7&12099DDE&0&0000'" /RebootStateFile:state.xml /BreakOnError /name:"*IOCTLTest*"
I test dei concetti fondamentali del dispositivo vengono eseguiti come Te.ProcessHost.exe (se esistente) o come Te.exe (se Te.ProcessHost.exe non esiste). La revisione dei thread in esecuzione in questi processi di test può essere utile per valutare i blocchi e/o gli errori di test.
È possibile ottenere l'ID del processo di Te.ProcessHost.exe eseguendo il comando seguente:
!process 0 0 Te.ProcessHost.exe
Passare il contesto del processo nel debugger al processo di test:
.process /p /r <process id>
Informazioni sul processo di dump:
!process <process id>