Videó: Az illesztőprogram hibakeresése WDF-forráskóddal

Ez a témakör egy videós oktatóanyagot tartalmaz, amely bemutatja, hogyan lehet hibakeresést végezni a Windows Illesztőprogram-keretrendszerek (WDF) illesztőprogramjában teljes hozzáféréssel a WDF-forráskódhoz. A videót követően, a videóban követett lépésről-lépésre eljárást találja meg a kényelmes hivatkozás érdekében.

A WDF-forráskeresés lehetővé teszi, hogy szabadon lépkedjen a keretrendszer kódjába anélkül, hogy le kellene töltenie a WDF-forráskódot. A hibakereső automatikusan letölti a WDF megfelelő verzióját a GitHubról.

Ha például a WinDbg-et használja a WDF-illesztőprogram hibakereséséhez egy Windows 10-es gépen, és a hibakereső be van kapcsolva a hívásverem keretrendszerkódjával, a Hívásverem nézetben duplán rákattinthat a WDF-keretre, és a WinDbg automatikusan letölti és megnyitja a megfelelő WDF-forrásfájlt az egyező sorban. Ezután végiglépkedhet a kódon, és töréspontokat állíthat be.

Ez a funkció a Windows 10, Technical Preview 10041-es vagy újabb build nyilvános kiadásait futtató célrendszerekhez érhető el. Ezek a buildek privát forrásból indexelt szimbólumfájlokkal rendelkeznek a KMDF (Wdf01000.sys) és az UMDF (Wudfx02000.dll) számára a Microsoft nyilvános szimbólumkiszolgálón. A WDF-kód forrásszintű hibakeresése csak a WinDbg-ben érhető el, a Visual Studio hibakeresőjében nem.

gyorskonfigurálás

Indítsa el a WinDbg kernel hibakeresési munkamenetét a célgépen, jelentkezzen be, és kövesse az alábbi lépéseket:

  1. Állítsa be az alapértelmezett szimbólum elérési útját a .symfix használatával. Ezzel beállítja a szimbólum elérési útját, hogy a következőre mutasson a szimbólumkiszolgálóra https://msdl.microsoft.com/download/symbols: .

    kd> .symfix

  2. Állítsa be az alapértelmezett forrás elérési útját a .srcfix használatával. Ezzel beállítja a forrás elérési útját a srv*-hoz, amely arra utasítja a hibakeresőt, hogy kérje le a forrásfájlokat a célmodulok szimbólumfájljaiban megadott helyekről.

    kd> .srcfix
    Source search path is: SRV*
    
  3. Töltse újra a szimbólumokat a .reload használatával, és győződjön meg arról, hogy a Wdf01000.sys szimbólumok (vagy az UMDF Wudfx02000.dll) forrásindexeltek. Ahogy az alábbi !lmi kimenetében látható, a Wdf01000.sys PDB forrásindexelt. Ha a sajátja nem, tekintse meg az alábbi WinDbg telepítő szakaszt.

    kd> .reload
    ...
    
    kd> !lmi wdf01000.sys
    Loaded Module Info: [wdf01000.sys] 
    ...
    Load Report: private symbols & lines, source indexed 
    C:\...\Wdf01000.pdb\...\Wdf01000.pdb
    
  4. Most már minden be van állítva! A WDF forráskódjának könnyű vizsgálati módja, ha beállít egy megszakítási pontot a keretrendszer IRP feldolgozó eljárásán, majd lépésről lépésre haladjon végig a kód további részein. Mivel egy Windows-rendszer sok bejövő KMDF-illesztővel rendelkezik, a WDF mindig betöltődik és fut, így ezt a töréspontot azonnal eléri (anélkül, hogy saját illesztőprogramot kellene betöltenie).

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

Ha ez nem működik, tekintse meg az alábbi WinDbg telepítési lépéseket.

WinDbg beállítása

Ha a fenti példa nem a várt módon működött, előfordulhat, hogy az alábbi utasítások közül egy vagy többre van szükség.

Forrásmód hibakeresésének engedélyezése

Győződjön meg arról, hogy a hibakeresés engedélyezve van a forrás módban . Nyissa meg a Hibakeresés menüt, és győződjön meg arról, hogy a forrás mód be van jelölve.

Elavult szimbólumok gyorsítótárának törlése

Ha korábban ugyanahhoz a Windows-célhoz hibakeresést végzett a WDF-illesztőprogramok esetében, akkor előfordulhat, hogy a helyileg gyorsítótárazott WDF-szimbólumokat használja, amelyek nem voltak forrásindexelve. Ezt a !lmi paranccsal ellenőrizheti:

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

A fenti Terhelési jelentés szerint a Wdf01000.pdb nem indexelt forrás. Ez azt jelenti, hogy a helyi WinDbg szimbólumok gyorsítótára elavult. A probléma megoldásához távolítsa el a PDB-t a WinDbg-ből, törölje a helyi gyorsítótárat (az elérési út eltérhet a fenti !lmi kimenettől függően), és töltse újra a PDB-t:

kd> .reload /u Wdf01000.sys

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

kd> .reload Wdf01000.sys

Most futtassa a!lmi parancsot az újbóli ellenőrzéshez: a PDF-fájlnak forrásindexeltként kell megjelennie, és fel kell bukkannia egy forráskódablakra.

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

A WDF forrásszintű hibakeresését nem csak az élő hibakereséshez és az összeomlási memóriaképek elemzéséhez használhatja, hanem a keretrendszer belső funkcióinak megismeréséhez is, ha töréspontokat állít be az olyan alapvető függvényeken, mint az IRP-diszpécser, és felfedezheti az azt követő kódútvonalakat.