Reproduzieren des Testfehlers durch Ausführen des Tests über die Befehlszeile
Es ist manchmal hilfreich, Testfehler zu reproduzieren, indem die Tests über die Befehlszeile ausgeführt werden. In der folgenden Dokumentation wird davon ausgegangen, dass das Hardware Lab Kit (HLK) bereits auf dem Controllercomputer installiert ist.
Ausführen eines Gerätegrundlagentests über die Befehlszeile
So führen Sie einen Gerätegrundlagentest über die Befehlszeile aus
Erstellen Sie auf dem getesteten System (System Under Test, SUT) einen Ordner C:\temp.
Kopieren Sie alle Dateien aus dem Ordner „\\<hckcontroller>\taefbinaries\<arch>“ in das Verzeichnis C:\temp auf dem SUT.
Dabei ist <hckcontroller der Name des Windows HLK-Controllers (Windows Hardware Lab Kit) und <arch> die SUT-Plattform.
Um den TAEF-Dienst zu installieren und zu starten, geben Sie die folgenden Befehle an einer Eingabeaufforderung ein:
Wechseln Sie zum oben erstellten Ordner „temp“:
Auf X86 oder X64: cd C:\temp
Auf Arm oder Arm64: cd C:\temp\MinTe
wex.services.exe /install:Te.Service
sc start Te.Service
Kopieren Sie alle Dateien aus dem Verzeichnis „\\<hckcontroller>\tests\<arch>\DevFund\“ nach C:\temp.
Wechseln Sie in das Verzeichnis C:\temp, und führen Sie den folgenden Befehl aus (beachten Sie, dass sich „Te.exe“ auf Arm- und Arm64-Systemen in C:\temp\MinTe befindet):
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
Dabei ist <test case name> der Name des Tests in der Binärdatei.
Der Schalter „/name“ ist optional. Da einige Binärdateien mehrere Tests enthalten, gibt der Schalter „/name“ an, welche Tests ausgeführt werden sollen. Wenn er nicht angegeben wird, werden alle Tests in der Binärdatei nacheinander ausgeführt. Sie können mit dem folgenden Befehl eine Liste der Tests in einer Binärdatei abrufen:
Te.exe Devfund_<testname>.dll /list
Die Datei „Devfund_PnPDTest.dll“ enthält beispielsweise die meisten PnP-bezogenen Tests:
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
Der Befehl zum Ausführen eines einzelnen Tests aus dieser Binärdatei könnte wie folgt lauten:
c:\temp\Te.exe Devfund_PnPDTest.dll.dll /name:PNPDTest::PNPSurpriseRemoveAndRestartDevice /p:"DQ=DeviceID='my\device\id'" /RebootStateFile:state.xml
Der Name des Tests in der Binärdatei entspricht nicht genau dem Titel des Tests. Weitere Informationen zur Zuordnung von Testnamen in Binärdateien zu HLK-Testnamen finden Sie unter Device.DevFund-Tests.
Verwenden von /BreakOnError für Unterbrechungen mit einem Wechseln zum Debugger
Wenn die Aufgabe „Test ausführen“ in einem Gerätegrundlagentest zu einem Fehler führt und Sie den Systemstatus im Kerneldebugger gleichzeitig überprüfen möchten, während der Test einen Fehler protokolliert, können Sie den Test manuell an einer Eingabeaufforderung und zusammen mit dem Kerneldebugger ausführen. Übergeben Sie dabei den Befehlszeilenschalter /BreakOnError an Te.exe.
Wenn „Te.exe“ mit dem Schalter /BreakOnError ausgeführt wird, wechselt das System zum Kerneldebugger, wenn der Test damit beginnt, einen Fehler zu protokollieren. Weitere Informationen zum Einrichten eines Kerneldebuggers finden Sie unter Manuelles Einrichten des Debuggings im Kernelmodus.
Wenn Sie einen Gerätegrundlagentest mit dem Schalter /BreakOnError ausführen möchten, fügen Sie diesen wie unten dargestellt hinzu:
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>*"
Dabei ist <test case name> der Name des Tests.
Beispielszenario für das Debuggen
Sie können den folgenden Fehler untersuchen, indem Sie den Test erneut ausführen und dabei das System zum Debugger wechseln lassen, wenn der Test den Fehler bei der erneuten Ausführung protokolliert.
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.
Sie können im Debugger einen Haltepunkt mithilfe des folgenden Befehls festlegen:
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*"
Gerätegrundlagentests werden mit „Te.ProcessHost.exe“ (sofern vorhanden) oder „Te.exe“ ausgeführt (wenn „Te.ProcessHost.exe“ nicht vorhanden ist). Indem Sie die Threads überprüfen, die in diesen Testprozessen ausgeführt werden, können Sie Probleme und/oder Testfehler eingrenzen.
Die Prozess-ID von Te.ProcessHost.exe können Sie mit dem folgenden Befehl abrufen:
!process 0 0 Te.ProcessHost.exe
Wechseln Sie den Prozesskontext im Debugger zum Testprozess:
.process /p /r <process id>
Informationen zum Sicherungsprozess:
!process <process id>