Sdílet prostřednictvím


Video: Ladění ovladače pomocí zdrojového kódu WDF

Toto téma obsahuje videokurz, který ukazuje, jak ladit ovladač WDF (Windows Driver Frameworks) s úplným přístupem ke zdrojovému kódu WDF. Po videu je k dispozici postup krok za krokem, který je představen ve videu, pro snadnou orientaci.

Ladění zdroje WDF umožňuje volně přejít do kódu architektury, aniž byste museli stahovat zdrojový kód WDF. Ladicí program automaticky stáhne správnou verzi WDF z GitHubu.

Pokud například používáte WinDbg k ladění ovladače WDF na počítači s Windows 10 a ladicí program je přerušen s kódem frameworku v zásobníku volání, můžete dvakrát kliknout na WDF rámec v zobrazení zásobníku volání a WinDbg automaticky stáhne a otevře příslušný zdrojový soubor WDF na odpovídající řádek. Pak můžete procházet kód a nastavit zarážky.

Tato funkce je dostupná pro cílové systémy s veřejnými verzemi Windows 10, buildu Technical Preview 10041 nebo novějším. Tyto buildy mají soubory symbolů indexovaných privátním zdrojem pro KMDF (Wdf01000.sys) a UMDF (Wudfx02000.dll) dostupné na serveru Microsoft Public Symbol Server. Ladění kódu WDF na úrovni zdroje je k dispozici pouze ve WinDbg, nikoli v ladicím programu sady Visual Studio.

rychlé zprovoznění

Spusťte ladicí relaci jádra WinDbg s cílovým počítačem, přerušte ji a postupujte takto:

  1. Nastavte výchozí cestu symbolu pomocí .symfix. Tím nastavíte cestu symbolů tak, aby odkazovala na server symbolů na adrese https://msdl.microsoft.com/download/symbols.

    kd> .symfix

  2. Nastavte výchozí zdrojovou cestu pomocí přípony .srcfix. Tím se nastaví zdrojová cesta na srv*, což ladicímu programu řekne, aby načetl zdrojové soubory z umístění zadaných v souborech symbolů cílových modulů.

    kd> .srcfix
    Source search path is: SRV*
    
  3. Znovu načtěte symboly pomocí .reloadu a ověřte, že symboly Wdf01000.sys (nebo Wudfx02000.dll pro UMDF) jsou indexované zdrojem. Jak je znázorněno ve výstupu souboru !lmi níže, Wdf01000.sys PDB je indexován ze zdroje. Pokud tomu tak není, přečtěte si část o instalaci WinDbg níže.

    kd> .reload
    ...
    
    kd> !lmi wdf01000.sys
    Loaded Module Info: [wdf01000.sys] 
    ...
    Load Report: private symbols & lines, source indexed 
    C:\...\Wdf01000.pdb\...\Wdf01000.pdb
    
  4. Teď máte všechno připravené! Snadno procházejte zdrojový kód WDF nastavením zastávky v rutině odesílání IRP a poté procházejte zbytkem kódu. Vzhledem k tomu, že systém Windows má mnoho vestavěných ovladačů KMDF, služba WDF je vždy načtena a spuštěna, takže tato zarážka bude okamžitě aktivována (aniž by bylo nutné načíst vlastní ovladač).

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

Pokud to nepomůže, projděte si následující postup instalace WinDbg.

Instalace WinDbg

Pokud výše uvedený příklad nefungoval podle očekávání, možná budete muset provést jeden nebo více níže uvedených pokynů.

Povolit ladění zdrojového režimu

Ujistěte se, že je povolené ladění ve zdrojovém režimu . Otevřete nabídku Ladění a ověřte, že je zaškrtnutý Režim zdroje.

Vymazat zastaralou mezipaměť symbolů

Pokud jste dříve ladili ovladače WDF pro stejný cíl Windows, možná používáte místně uložené symboly WDF uložené v mezipaměti, které nebyly indexovány zdrojem. Můžete to zkontrolovat pomocí příkazu !lmi:

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

Podle výše uvedené zprávy o zatížení není soubor Wdf01000.pdb indexován podle zdroje. To znamená, že vaše místní mezipaměť symbolů WinDbg je zastaralá. Pokud chcete tento problém vyřešit, uvolněte soubor PDB z WinDbg, vymažte místní mezipaměť (cesta se může lišit podle výše uvedeného výstupu !lmi) a znovu načtěte soubor PDB:

kd> .reload /u Wdf01000.sys

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

kd> .reload Wdf01000.sys

Teď spusťte příkaz !lmi a zkontrolujte to znovu: Soubor PDB by se měl zobrazit jako zdroj indexovaný a mělo by se zobrazit okno zdrojového kódu.

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

Ladění na úrovni zdroje WDF můžete použít nejen pro živé ladění a analýzu výpisů stavu systému, ale také pro další informace o interních architekturách nastavením zarážek na základních funkcích, jako je dispečer IRP, a prozkoumáním následných cest kódu.