Reproducir el error de prueba mediante la ejecución de la prueba desde la línea de comandos
A veces resulta conveniente reproducir errores de prueba mediante la ejecución de las pruebas desde la línea de comandos. En la siguiente documentación se da por supuesto que el Hardware Lab Kit (HLK) ya se ha instalado en la máquina controladora.
Ejecución de una prueba de aspectos básicos del dispositivo desde la línea de comandos
Para ejecutar una prueba de aspectos básicos del dispositivo desde la línea de comandos:
Cree una carpeta c:\temp en el sistema sometido a prueba (SUT).
Copie todos los archivos de \\<la carpeta hckcontroller>\taefbinaries\<arch> en c:\temp en el SUT.
Donde <hckcontroller es el nombre del controlador windows Hardware Lab Kit (Windows HLK) y <arch> es la plataforma SUT.
Para instalar e iniciar el servicio TAEF , escriba los siguientes comandos desde un símbolo del sistema:
Vaya a la carpeta "temp" creada anteriormente:
En X86 o X64: cd c:\temp
En Arm o Arm64: cd c:\temp\MinTe
wex.services.exe /install:Te.Service
sc start Te.Service
Copie todos los archivos del \\< directorio hckcontroller>\tests\<arch>\DevFund\ a c:\temp.
Cambie el directorio a c:\temp y ejecute el siguiente comando (tenga en cuenta que Te.exe reside en c:\temp\MinTe en Arm y 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
Donde <nombre> del caso de prueba es el nombre de la prueba en el binario de prueba.
El modificador /name es opcional. Dado que algunos archivos binarios de prueba contienen varias pruebas, el modificador /name especifica qué pruebas se deben ejecutar. Si no se especifica, todas las pruebas contenidas en el binario de prueba se ejecutan en secuencia. La lista de pruebas de un archivo binario de prueba se puede obtener mediante la ejecución del siguiente comando:
Te.exe Devfund_<testname>.dll /list
Por ejemplo, el Devfund_PnPDTest.dll contiene la mayoría de las pruebas relacionadas con 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
El comando para ejecutar una sola prueba desde este binario de prueba podría tener este aspecto:
c:\temp\Te.exe Devfund_PnPDTest.dll.dll /name:PNPDTest::PNPSurpriseRemoveAndRestartDevice /p:"DQ=DeviceID='my\device\id'" /RebootStateFile:state.xml
El nombre de la prueba en el binario de prueba no será exactamente el mismo que el título de la prueba. Para obtener una asignación de nombres binarios de prueba a nombres de prueba de HLK, consulte Pruebas device.DevFund.
Cómo usar /BreakOnError para dividir en el depurador
Si se produce un error en la tarea "Ejecutar prueba" en una prueba de aspectos básicos del dispositivo y desea revisar el estado del sistema en el depurador de kernel al mismo tiempo que la prueba registra un error, puede ejecutar la prueba manualmente desde un símbolo del sistema junto con el depurador de kernel y pasar el modificador de línea de comandos /BreakOnError a Te.exe.
La ejecución de Te.exe con el modificador /BreakOnError hace que el sistema se interrumpa en el depurador de kernel cuando la prueba esté lista para registrar un error. Para obtener más información sobre cómo configurar un depurador de kernel, vea Configurar manualmente Kernel-Mode depuración.
Para ejecutar una prueba de aspectos básicos del dispositivo con el modificador /BreakOnError , agregue el modificador como se muestra a continuación:
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>*"
Donde <el nombre> del caso de prueba es el nombre de la prueba.
Escenario de depuración de ejemplo
Para investigar el siguiente error, vuelva a ejecutar la prueba y haga que el sistema se interrumpa en el depurador cuando la prueba registra el error al volver a ejecutarse.
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.
Puede establecer un punto de interrupción en el depurador mediante el siguiente comando:
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*"
Las pruebas de aspectos básicos del dispositivo se ejecutan como Te.ProcessHost.exe (si existe) o como Te.exe (si no existe Te.ProcessHost.exe). La revisión de subprocesos que se ejecutan en estos procesos de prueba puede ayudar a evaluar los bloqueos o errores de prueba.
Para obtener el identificador de proceso de Te.ProcessHost.exe , ejecute el siguiente comando:
!process 0 0 Te.ProcessHost.exe
Cambie el contexto del proceso en el depurador al proceso de prueba:
.process /p /r <process id>
Información del proceso de volcado:
!process <process id>