Freigeben über


Video: Debuggen des Treibers mit WDF-Quellcode

Dieses Thema enthält ein Videotutorial, das zeigt, wie Sie Ihren WDF-Treiber (Windows Driver Frameworks) mit Vollzugriff auf den WDF-Quellcode debuggen. Im Anschluss an das Video finden Sie die Schritt-für-Schritt-Vorgehensweise im Video, um eine praktische Referenz zu finden.

Mithilfe des WDF-Quelldebuggens können Sie frei in Frameworkcode einsteigen, ohne WDF-Quellcode herunterladen zu müssen. Der Debugger lädt automatisch die richtige Version von WDF von GitHub herunter.

Wenn Sie beispielsweise WinDbg verwenden, um Ihren WDF-Treiber auf einem Windows 10 Computer zu debuggen, und der Debugger mit Frameworkcode in der Aufrufliste unterbrochen ist, können Sie in der Aufrufliste auf den WDF-Frame doppelklicken. WinDbg lädt automatisch die relevante WDF-Quelldatei in der entsprechenden Zeile herunter und öffnet sie. Anschließend können Sie den Code schrittweise durchlaufen und Haltepunkte festlegen.

Dieses Feature ist für Zielsysteme verfügbar, auf denen öffentliche Versionen von Windows 10, Technical Preview Build 10041 oder höher ausgeführt werden. Diese Builds verfügen über indizierte Private Source-Symboldateien für KMDF (Wdf01000.sys) und UMDF (Wudfx02000.dll), die auf dem Microsoft Public Symbol Server verfügbar sind. Das Debuggen von WDF-Code auf Quellebene ist nur in WinDbg und nicht im Visual Studio-Debugger verfügbar.

Schnellstart

Starten Sie eine WinDbg-Kerneldebugsitzung auf dem Zielcomputer, brechen Sie ein, und führen Sie die folgenden Schritte aus:

  1. Legen Sie den Standardsymbolpfad mithilfe von .symfix fest. Dadurch wird festgelegt, dass der Symbolpfad auf den Symbolserver unter https://msdl.microsoft.com/download/symbolsverweist.

    kd> .symfix

  2. Legen Sie den Standardquellpfad mithilfe von .srcfix fest. Dadurch wird der Quellpfad auf srv* festgelegt. Dadurch wird der Debugger aufgefordert, Quelldateien von Speicherorten abzurufen, die in den Symboldateien der Zielmodule angegeben sind.

    kd> .srcfix
    Source search path is: SRV*
    
  3. Laden Sie Symbole mithilfe von .reload neu, und vergewissern Sie sich, dass die Wdf01000.sys Symbole (oder Wudfx02000.dll für UMDF) quellindiziert sind. Wie in der ausgabe von !lmi unten gezeigt, ist die Wdf01000.sys PDB quellindiziert. Falls nicht, lesen Sie den Abschnitt WinDbg-Setup weiter unten.

    kd> .reload
    ...
    
    kd> !lmi wdf01000.sys
    Loaded Module Info: [wdf01000.sys] 
    ...
    Load Report: private symbols & lines, source indexed 
    C:\...\Wdf01000.pdb\...\Wdf01000.pdb
    
  4. Der Vorgang ist nun abgeschlossen. Eine einfache Möglichkeit zum Schrittweisen Durchlaufen des WDF-Quellcodes besteht darin, einen Haltepunkt für die IRP-Dispatchroutine des Frameworks festzulegen und dann den Rest des Codes schrittweise zu durchlaufen. Da ein Windows-System über viele KMDF-Treiber im Posteingang verfügt, wird WDF immer geladen und ausgeführt, sodass dieser Haltepunkt sofort erreicht wird (ohne dass Ein eigener Treiber geladen werden muss).

    kd> bp Wdf01000!FxDevice::DispatchWithLock
    kd> g
    Breakpoint 0 hit
    Wdf01000!FxDevice::DispatchWithLock:
    87131670 8bff mov edi,edi 
    

Wenn dies nicht funktioniert, sehen Sie sich die unten aufgeführten WinDbg-Setupschritte an.

WinDbg-Setup

Wenn das obige Beispiel nicht wie erwartet funktioniert hat, müssen Sie möglicherweise eine oder mehrere der folgenden Anweisungen ausführen.

Debuggen im Quellmodus aktivieren

Stellen Sie sicher , dass das Debuggen im Quellmodus aktiviert ist. Öffnen Sie das Menü Debuggen, und vergewissern Sie sich, dass quellmodus aktiviert ist.

Cache für veraltete Symbole löschen

Wenn Sie zuvor WDF-Treiber für dasselbe Windows-Ziel debuggen, verwenden Sie möglicherweise die lokal zwischengespeicherten WDF-Symbole, die nicht quellindiziert wurden. Sie können dies mit dem Befehl !lmi überprüfen:

kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb

Gemäß dem obigen Ladebericht ist Wdf01000.pdb nicht quellindiziert. Dies bedeutet, dass Ihr lokaler WinDbg-Symbolcache veraltet ist. Um dies zu beheben, entladen Sie den PDB aus WinDbg, löschen Sie den lokalen Cache (Ihr Pfad kann sich je nach der obigen !lmi-Ausgabe unterscheiden), und laden Sie den PDB erneut:

kd> .reload /u Wdf01000.sys

CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb

kd> .reload Wdf01000.sys

Führen Sie nun !lmi aus, um erneut zu überprüfen: Der PDB sollte als Quelle indiziert angezeigt werden, und ein Quellcodefenster sollte angezeigt werden.

kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb 

Sie können das Debuggen auf WDF-Quellebene nicht nur zum Livedebuggen und Analysieren von Absturzabbildern verwenden, sondern auch, um mehr über die Framework-Internen zu erfahren, indem Sie Haltepunkte für Kernfunktionen wie den IRP-Dispatcher festlegen und die nachfolgenden Codepfade untersuchen.