Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo argomento contiene un'esercitazione video che illustra come eseguire il debug del driver Windows Driver Frameworks (WDF) con accesso completo al codice sorgente WDF. Seguendo il video è riportata la procedura dettagliata seguita nel video, per un riferimento pratico.
Il debug dell'origine WDF consente di eseguire liberamente il codice del framework senza dover scaricare il codice sorgente WDF. Il debugger scarica automaticamente la versione corretta di WDF da GitHub.
Ad esempio, se si usa WinDbg per eseguire il debug del driver WDF in un computer Windows 10 e il debugger viene interrotto con il codice framework nello stack di chiamate, è possibile fare doppio clic sul frame WDF nella visualizzazione Stack di chiamate e WinDbg scarica automaticamente e apre il file di origine WDF pertinente nella riga corrispondente. È quindi possibile eseguire il codice e impostare i punti di interruzione.
Questa funzionalità è disponibile per i sistemi di destinazione che eseguono versioni pubbliche di Windows 10, Technical Preview build 10041 o versioni successive. Queste compilazioni hanno file di simboli indicizzati di origine privata per KMDF (Wdf01000.sys) e UMDF (Wudfx02000.dll) disponibili nel server dei simboli pubblici Microsoft. Il debug a livello di origine del codice WDF è disponibile solo in WinDbg e non nel debugger di Visual Studio.
Avvio rapido
Avviare una sessione di debug del kernel WinDbg nel computer di destinazione, interrompere l'esecuzione e seguire questa procedura:
Impostare il percorso del simbolo predefinito usando .symfix. Imposta il percorso del simbolo in modo che punti al server dei simboli in https://msdl.microsoft.com/download/symbols.
kd> .symfixImpostare il percorso di origine predefinito usando .srcfix. In questo modo il percorso di origine viene impostato su srv*, che indica al debugger di recuperare i file di origine dai percorsi specificati nei file di simboli dei moduli di destinazione.
kd> .srcfix Source search path is: SRV*Ricaricare i simboli usando .reload e verificare che i simboli di Wdf01000.sys (o Wudfx02000.dll per UMDF) siano indicizzati in base all'origine. Come illustrato nell'output di !lmi seguente, il Wdf01000.sys PDB è indicizzato alla sorgente. Se il tuo non lo è, vedere la sezione Configurazione di WinDbg di seguito.
kd> .reload ... kd> !lmi wdf01000.sys Loaded Module Info: [wdf01000.sys] ... Load Report: private symbols & lines, source indexed C:\...\Wdf01000.pdb\...\Wdf01000.pdbOra sei tutto pronto! Un modo semplice per eseguire il codice sorgente di WDF consiste nell'impostare un punto di interruzione nella routine di invio IRP del framework e quindi eseguire il resto del codice. Poiché un sistema Windows ha molti driver KMDF preinstallati, WDF è sempre caricato e in esecuzione, quindi questo breakpoint verrà raggiunto immediatamente (senza dover caricare il proprio driver).
kd> bp Wdf01000!FxDevice::DispatchWithLock kd> g Breakpoint 0 hit Wdf01000!FxDevice::DispatchWithLock: 87131670 8bff mov edi,edi
Se non funziona, vedere la procedura di installazione di WinDbg seguente.
Installazione di WinDbg
Se l'esempio precedente non funziona come previsto, potrebbe essere necessario eseguire una o più delle istruzioni seguenti.
Abilitare il debug in modalità origine
Assicurarsi che il debug in modalità origine sia abilitato. Aprire il menu Debug e verificare che sia selezionata la modalità di origine.
Cancella cache dei simboli obsoleti
Se in precedenza è stato eseguito il debug dei driver WDF per la stessa destinazione Windows, è possibile usare i simboli WDF memorizzati nella cache locale che non sono stati indicizzati dall'origine. È possibile controllare questo comando con il comando !lmi:
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, not source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
In base al rapporto di carico sopra, Wdf01000.pdb non è indicizzato alla sorgente. Ciò significa che la cache dei simboli WinDbg locale non è aggiornata. Per risolvere questo problema, scaricare il PDB da WinDbg, cancellare la cache locale (il percorso potrebbe differire in base all'output !lmi precedente) e ricaricare il PDB:
kd> .reload /u Wdf01000.sys
CMD> del
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
kd> .reload Wdf01000.sys
Eseguire ora !lmi per controllare di nuovo: il PDB dovrebbe essere visualizzato come origine indicizzata e verrà visualizzata una finestra del codice sorgente.
kd> !lmi Wdf01000.sys
Loaded Module Info: [wdf01000.sys]
...
Load Report: private symbols & lines, source indexed
C:\...\Wdf01000.pdb\...\Wdf01000.pdb
È possibile usare il debug a livello di origine di WDF non solo per il debugging in tempo reale e l'analisi dei dump di arresto anomalo, ma anche per acquisire una maggiore comprensione degli interni del framework impostando punti di interruzione su funzioni fondamentali come il dispatcher IRP ed esplorando i percorsi di codice successivi.