Olvasás angol nyelven

Megosztás a következőn keresztül:


Windows-illesztőprogramok lépésről lépésre történő hibakeresése laboratóriumban (echo kernel mód)

Ez a laboratórium bemutatja a WinDbg kernel hibakeresőt. A WinDbg használatával hibakeresést végezhet az echo kernel módú mintaillesztő-kódban.

Laborcélok

Ez a tesztkörnyezet olyan gyakorlatokat tartalmaz, amelyek bemutatják a hibakeresési eszközöket, megtanítják a gyakori hibakeresési parancsokat, bemutatják a töréspontok használatát, és bemutatják a hibakeresési bővítmények használatát.

Ebben a laborban egy élő kernel hibakeresési kapcsolat használatával vizsgálja meg a következő műveleteket:

  • A Windows hibakereső parancsainak használata
  • Standard parancsok használata (hívásveremek, változók, szálak, IRQL)
  • Speciális illesztőprogram-hibakeresési parancsok (!parancsok) használata
  • Szimbólumok használata
  • Töréspontok beállítása élő hibakeresésben
  • Hívásveremek megtekintése
  • A Plug and Play eszközfa megjelenítése
  • Munka szál- és folyamatkörnyezetben

Felhasználói és kernel módú hibakeresés

A Windows hibakereső használatakor kétféle hibakeresést végezhet:

Felhasználói mód – Az alkalmazások és alrendszerek felhasználói módban futnak a számítógépen. A felhasználói módban futó folyamatok ezt a saját virtuális címterükön belül hajtják végre. A rendszer számos részéhez, például a rendszer hardveréhez, a nem a használatukhoz lefoglalt memóriához, valamint a rendszer más részeihez való közvetlen hozzáféréstől korlátozottak, amelyek veszélyeztethetik a rendszer integritását. Mivel a felhasználói módban futó folyamatok hatékonyan elkülönülnek a rendszertől és más felhasználói módú folyamatoktól, nem zavarhatják ezeket az erőforrásokat.

Kernel mód – Az operációs rendszer és a kiemelt programok kernel módban futnak. A kernel módú kód jogosult a rendszer bármely részének elérésére. Nincs korlátozva, mint a felhasználói mód kódja. Bármely más, felhasználói módban vagy kernel módban futó folyamat bármely részéhez hozzáférhet. Az operációs rendszer alapvető funkcióinak nagy része és számos hardvereszköz-illesztőprogram kernel módban fut.

Ez a gyakorlat a felhasználói és a kernel módú hibakeresés során gyakran használt hibakeresési parancsokat ismerteti. A gyakorlat a hibakeresési bővítményeket is lefedi, amelyeket "bang" !parancsoknakis neveznek, és amelyeket kernel-módú hibakereséshez használnak.

Tesztkörnyezet beállítása

A laboratóriumi gyakorlat elvégzéséhez a következő hardverre van szüksége:

  • Windows 10 rendszerű laptop vagy asztali számítógép (gazdagép)
  • Windows 10-et futtató második laptop vagy asztali számítógép (cél)
  • Hálózati központ vagy útválasztó és hálózati kábelek a két számítógép csatlakoztatásához
  • Hozzáférés az internethez szimbólumfájlok letöltéséhez

Labor elvégzéséhez a következő szoftverre van szüksége:

  • Visual Studio
  • Windows 10-hez készült Windows Software Development Kit (SDK)
  • Windows Driver Kit (WDK) a Windows 10-hez
  • A Windows 10-hez készült echo-mintaillesztő

A labor a következő szakaszokból áll:

Csatlakozás kernel módú WinDbg-munkamenethez

Ebben a szakaszban konfigurálja a hálózati hibakeresést a gazdagépen és a célrendszeren.

A laborban lévő számítógépeket úgy kell konfigurálni, hogy Ethernet hálózati kapcsolatot használjanak a kernel hibakereséséhez.

Ez a labor két számítógépet használ. A Windows-hibakereső a gazdagépen rendszeren fut, a Kernel Mode Driver Framework (KMDF) echo-illesztőprogram pedig a cél rendszeren fut.

A két számítógép csatlakoztatásához használjon hálózati központot vagy útválasztót és hálózati kábeleket.

diagram két, hálózati központon vagy útválasztón keresztül csatlakoztatott számítógépet ábrázol.

A kernel módú alkalmazások használatához és a WinDbg használatához javasoljuk, hogy a KDNET-et Ethernet-átvitelen keresztül használja. További információ az Ethernet átviteli protokoll használatáról: A WinDbg (kernel mód) használatának első lépései. További információ a célszámítógép beállításáról: Számítógép előkészítése manuális illesztőprogram-telepítésre és A KDNET hálózati kernel hibakeresésének automatikus beállítása.

Kernel módú hibakeresés konfigurálása az Ethernet használatával

Kernel módú hibakeresés engedélyezése a célrendszeren:

  1. A gazdarendszerben nyisson meg egy parancssori ablakot, és adja meg ipconfig az IPv4-cím meghatározásához.

    Output
    Windows IP Configuration
    Ethernet adapter Ethernet:
       Connection-specific DNS Suffix  . :
       Link-local IPv6 Address . . . . . : fe80::c8b6:db13:d1e8:b13b%3
       Autoconfiguration IPv4 Address. . : 169.182.1.1
       Subnet Mask . . . . . . . . . . . : 255.255.0.0
       Default Gateway . . . . . . . . . :
    
  2. Rögzítse a gazdarendszer IP-címét: ______________________________________

  3. A célrendszerben nyisson meg egy parancssori ablakot, és a ping paranccsal erősítse meg a két rendszer közötti hálózati kapcsolatot.

    Console
    ping 169.182.1.1
    

    A mintakimenetben látható 169.182.1.1 helyett használja a gazdarendszer tényleges IP-címét.

    Output
    Pinging 169.182.1.1 with 32 bytes of data:
    Reply from 169.182.1.1: bytes=32 time=1ms TTL=255
    Reply from 169.182.1.1: bytes=32 time<1ms TTL=255
    Reply from 169.182.1.1: bytes=32 time<1ms TTL=255
    Reply from 169.182.1.1: bytes=32 time<1ms TTL=255
    
    Ping statistics for 169.182.1.1:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 0ms, Maximum = 1ms, Average = 0ms
    

Engedélyezze a kernel módú hibakeresést a célrendszeren az alábbi lépések végrehajtásával.

Fontos

Mielőtt a BCDEdit használatával módosíthatná a rendszerindítási adatokat, előfordulhat, hogy ideiglenesen fel kell függesztenie a Windows biztonsági funkcióit, például a BitLockert és a biztonságos rendszerindítást a tesztszámítógépen. Ha a tesztelés befejeződött, engedélyezze újra ezeket a biztonsági funkciókat. A biztonsági funkciók letiltásakor megfelelően kezelje a tesztszámítógépet. A biztonságos rendszerindítás általában le van tiltva az UEFI-ben. Az UEFI-beállítás eléréséhez használja a System, Recovery, Advanced start-up parancsot. Újraindításkor válassza a Hibaelhárítás, a Speciális beállítások és az UEFI belső vezérlőprogram beállításai lehetőséget. Óvatosan, mert az UEFI-beállítások helytelen beállítása vagy a BitLocker letiltása működésképtelené teheti a rendszert.

  1. A célszámítógépen nyisson meg egy parancssori ablakot rendszergazdaként. A hibakeresés engedélyezéséhez adja meg ezt a parancsot:

    Console
    bcdedit /set {default} DEBUG YES
    
  2. Adja meg ezt a parancsot a tesztaláírás engedélyezéséhez:

    Console
    bcdedit /set TESTSIGNING ON 
    
  3. Adja meg ezt a parancsot a gazdarendszer IP-címének beállításához. A korábban rögzített gazdarendszer IP-címét használja, nem pedig a megjelenítettt.

    Console
    bcdedit /dbgsettings net hostip:192.168.1.1 port:50000 key:2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    

    Figyelmeztetés

    A kapcsolat biztonságának növeléséhez és a véletlenszerű ügyfél hibakereső kapcsolatkéréseinek kockázatának csökkentéséhez használjon automatikusan generált véletlenszerű kulcsot. További információ: A KDNET hálózati kernel automatikus hibakeresésének beállítása.

  4. Adja meg ezt a parancsot annak ellenőrzéséhez, hogy a dbgsettings értékei megfelelően vannak-e beállítva:

    Console
    bcdedit /dbgsettings
    
    Output
    key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    debugtype               NET
    hostip                  169.168.1.1
    port                    50000
    dhcp                    Yes
    The operation completed successfully.
    

    Megjegyzés

    Ha üzenetet kap a tűzfalról, és használni szeretné a hibakeresőt, jelölje ki mindhárom mezőt.

    Képernyőkép a Windows biztonsági riasztás párbeszédpaneléről, amely azt jelzi, hogy a Windows tűzfal letiltotta az alkalmazás egyes funkcióit.

  5. A gazdaszámítógépen nyisson meg egy parancssori ablakot rendszergazdaként. Ez a tesztkörnyezet a Windows-készlet telepítésének részeként telepített Windows Driver Kit (WDK) WinDbg.exe x64-es verzióját használja. Váltson az alapértelmezett WinDbg könyvtárra, az alapértelmezett hely alább látható.

    Console
    cd C:\Program Files(x86)\Windows Kits\10\Debuggers\x64 
    

    Ez a tesztkörnyezet feltételezi, hogy mindkét számítógép a Windows 64 bites verzióját futtatja a célon és a gazdagépen egyaránt. Ha ez nem így van, a legjobb módszer az, ha ugyanolyan bitverziójú eszközöket futtat a gazdagépen, mint amilyen a céleszközön fut. Ha például a cél 32 bites Windowst futtat, futtassa a hibakereső 32 bites verzióját a gazdagépen. További információ: A 32 bites vagy a 64 bites hibakereső eszközök kiválasztása.

  6. Nyissa meg a WinDbg-et távoli felhasználói hibakereséssel az alábbi paranccsal. A kulcs és a port értékei megegyeznek a célszámítógépen a BCDEdit használatával korábban beállított értékekkel.

    Console
    WinDbg –k net:port=50000,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    
  7. Indítsa újra a célrendszert.

  8. Egy-két perc múlva a hibakeresési kimenetnek meg kell jelennie a gazdarendszerben.

    Output
    Microsoft (R) Windows Debugger Version 10.0.17074.1002 AMD64
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    Using NET for debugging
    Opened WinSock 2.0
    Waiting to reconnect...
    Connected to target 169.182.1.1 on port 50005 on local IP 169.182.1.2
    You can get the target MAC address by running .kdtargetmac command.
    Connected to Windows 10 16299 x64 target at (Wed Feb 28 17:16:23.051 2018 (UTC - 8:00)), ptr64 TRUE
    Kernel Debugger connection established.  (Initial Breakpoint requested)
    Symbol search path is: srv*
    Executable search path is: 
    Windows 10 Kernel Version 16299 MP (4 procs) Free x64
    Product: WinNt, suite: TerminalServer SingleUserTS
    Built by: 16299.15.amd64fre.rs3_release.170928-1534
    Machine Name:
    Kernel base = 0xfffff800`9540d000 PsLoadedModuleList = 0xfffff800`95774110
    Debug session time: Wed Feb 28 17:16:23.816 2018 (UTC - 8:00)
    System Uptime: 0 days 0:00:20.534
    

A Hibakereső parancs ablaka a WinDbg elsődleges hibakeresési információs ablaka. Megadhatja a hibakereső parancsokat, és megtekintheti a parancs kimenetét ebben az ablakban.

A Hibakereső parancs ablaka két panelre van felosztva. Adja meg a parancsokat a kisebb panelen, amely az ablak alján található parancsbejegyzési ablaktábla, és tekintse meg a parancs kimenetét az ablak tetején található nagyobb panelen.

A parancsbejegyzési panelen a Fel és a Le nyílbillentyűvel görgessen végig a parancselőzményeken. Amikor megjelenik egy parancs, szerkesztheti, vagy az Enter billentyűt lenyomva futtathatja a parancsot.

Kernel módú hibakeresési parancsok és technikák

Ebben a szakaszban hibakeresési parancsokkal jelenítheti meg a célrendszerre vonatkozó információkat.

Egyes hibakeresési parancsok szövegeket jelenítenek meg a Hibakereső korrektúranyelv (DML) használatával, amelyeket kiválasztva gyorsan gyűjthet további információkat.

  1. A gazdarendszeren a Ctrl+Scroll Lock in WinDBg billentyűkombinációval törhet be a célrendszeren futó kódba. Eltarthat egy ideig, mire a célrendszer válaszol.

    főképernyő a hibakeresőben, amelyen egy élő kernelkapcsolat parancssori ablakának kimenete látható.

  2. Írja be a következő parancsot a DML engedélyezéséhez a Hibakereső parancs ablakában:

    dbgcmd
    0: kd> .prefer_dml 1
    DML versions of commands on by default
    
  3. A hivatkozási parancs súgóját a .hh paranccsal érheti el. Adja meg a következő parancsot a .prefer_dmlparancshivatkozási súgójának megtekintéséhez:

    dbgcmd
    0: kd> .hh .prefer_dml
    

    A Hibakereső súgófájlja megjeleníti a .prefer_dml parancs súgóját.

    A hibakereső súgóalkalmazás képernyőképe, amely a .prefer-dml parancs súgóját jeleníti meg.

  4. Ha részletes verzióinformációkat szeretne megjeleníteni a célrendszeren, írja be a vertarget (Célszámítógép verziójának megjelenítése) parancsot a WinDbg ablakban:

    dbgcmd
    0: kd> vertarget
    Windows 10 Kernel Version 9926 MP (4 procs) Free x64
    Product: WinNt, suite: TerminalServer SingleUserTS
    Built by: 9926.0.amd64fre.fbl_awesome1501.150119-1648
    Machine Name: ""
    Kernel base = 0xfffff801`8d283000 PsLoadedModuleList = 0xfffff801`8d58aef0
    Debug session time: Fri Feb 20 10:15:17.807 2015 (UTC - 8:00)
    System Uptime: 0 days 01:31:58.931
    
  5. Annak ellenőrzéséhez, hogy a megfelelő kernelmódú folyamattal dolgozik-e, írja be a lm (List Loaded Modules) parancsot a WinDbg ablakban a betöltött modulok megjelenítéséhez:

    dbgcmd
    0: Kd> lm
    start             end                 module name
    fffff801`09200000 fffff801`0925f000   volmgrx    (no symbols)
    fffff801`09261000 fffff801`092de000   mcupdate_GenuineIntel   (no symbols)
    fffff801`092de000 fffff801`092ec000   werkernel   (export symbols)       werkernel.sys
    fffff801`092ec000 fffff801`0934d000   CLFS       (export symbols)       CLFS.SYS
    fffff801`0934d000 fffff801`0936f000   tm         (export symbols)       tm.sys
    fffff801`0936f000 fffff801`09384000   PSHED      (export symbols)       PSHED.dll
    fffff801`09384000 fffff801`0938e000   BOOTVID    (export symbols)       BOOTVID.dll
    fffff801`0938e000 fffff801`093f7000   spaceport   (no symbols)
    fffff801`09400000 fffff801`094cf000   Wdf01000   (no symbols)
    fffff801`094d9000 fffff801`09561000   CI         (export symbols)       CI.dll
    ...
    

    A kihagyott kimenet a következővel van megjelölve: "..." ebben a laborban.

  6. Ha részletes információkat szeretne kérni egy adott modulról, használja a v (részletes) lehetőséget:

    dbgcmd
    0: Kd> lm v m tcpip
    Browse full module list
    start             end                 module name
    fffff801`09eeb000 fffff801`0a157000   tcpip      (no symbols)           
        Loaded symbol image file: tcpip.sys
        Image path: \SystemRoot\System32\drivers\tcpip.sys
        Image name: tcpip.sys
        Browse all global symbols  functions  data
        Timestamp:        Sun Nov 09 18:59:03 2014 (546029F7)
        CheckSum:         00263DB1
        ImageSize:        0026C000
        Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
    
    Unable to enumerate user-mode unloaded modules, Win32 error 0n30
    

    Nincs megadva szimbólumelérési út és nincsenek betöltött szimbólumok, ezért korlátozott információ érhető el a hibakeresőben.

A KMDF echo-illesztőprogram letöltése és létrehozása

Ebben a szakaszban töltse le és hozza létre a KMDF echo-illesztőprogramot.

Amikor WinDbg-et használ, általában a saját illesztőprogram-kódját dolgozza fel. A WinDbg-művelet megismeréséhez ez a tesztkörnyezet az "Echo" KMDF-sablon mintaillesztőt használja. A forráskód a WinDbg-ben megjelenő információk megértéséhez érhető el. Ez a minta azt is szemlélteti, hogyan lehet egy lépésben végigvezetni a natív kernel módú kódon. Ez a technika hasznos lehet összetett kernelmódú kódhibák hibakereséséhez.

Az Echo-mintaillesztő letöltése és létrehozása:

  1. Először töltse le és bontsa ki a KMDF Echo Sample a GitHubról.

    A KMDF Echo-minta az általános mappában található.

    Képernyőkép a GitHub windows-driver-samples oldaláról, amely kiemeli az általános mappát és a zip-letöltés gombot.

    1. Töltse le az illesztőprogram-mintákat egy zip-fájlban: Illesztőprogram-minták

    2. Töltse le a zip-fájlt a helyi merevlemezre.

    3. Jelölje ki és tartsa lenyomva a zip fájlt, vagy kattintson rá a jobb egérgombbal, majd válassza az Az összes kibontásalehetőséget. Adjon meg egy új mappát, vagy válassza ki tallózással a meglévőt a kinyert fájlok tárolására. Megadhat például új mappaként C:\DriverSamples\, ahová ki szeretné csomagolni a fájlokat.

    4. A fájlok kinyerése után lépjen a következő almappába: C:\DriverSamples\general\echo\kmdf

  2. A Microsoft Visual Studióban válassza a Fájl>>projekt/megoldás megnyitása... lehetőséget, és lépjen a kibontott fájlokat tartalmazó mappára, például C:\DriverSamples\general\echo\kmdf. A megnyitáshoz kattintson duplán a kmdfecho megoldásfájlra.

    A Visual Studióban keresse meg a Megoldáskezelőt. Ha ez az ablak még nincs megnyitva, válassza Megoldáskezelő a Nézet menüből. A Megoldáskezelőben egy olyan megoldás látható, amelynek három projektje van.

    Képernyőkép arról, hogy a Visual Studio megjeleníti a kmdfecho projektből betöltött device.c fájlt.

  3. Állítsa be a minta konfigurációját és platformját. A Megoldáskezelőben jelölje ki és tartsa lenyomva, vagy kattintson a jobb gombbal Megoldás "kmdfecho" (3 projekt), majd válassza Configuration Managerlehetőséget. Győződjön meg arról, hogy a konfiguráció és a platform beállításai megegyeznek a három projekt esetében. Alapértelmezés szerint a konfiguráció beállítása a Win10 Debug, a platform beállítása pedig a Win64 az összes projekthez. Ha egy projekthez bármilyen konfigurációt vagy platformmódosítást hajt végre, hajtsa végre ugyanazokat a módosításokat a többi három projekt esetében is.

  4. Az illesztőprogram-mintákat módosítani kell, hogy olyan értékeket használjon, amelyek nincsenek átfedésben a meglévő illesztőprogramokkal. Tekintse meg a Mintakódtól a termelési telepítésre kész illesztőprogramig – A mintákban, hogyan hozhat létre egy egyedi illesztőprogram-mintát, amely együtt fog létezni a Windowsban jelenleg telepített illesztőprogramokkal.

  5. Állítsa be a futtatókörnyezeti kódtárat. Nyissa meg az echo-illesztőprogram tulajdonságlapját, és keresse meg C/C++>Kódgenerálás. Módosítsa a futtatókörnyezeti kódtárat többszálas hibakeresésre (/MTd). A buildelési lehetőségekről további információt a /MD, /MT és /LD (Run-Time könyvtár használata)című témakörben talál.

    Képernyőkép a Visual Studio Echo tulajdonságlapjáról, amely kiemeli a futtatókörnyezeti kódtár beállításait.

  6. Az illesztőprogram tulajdonságai között győződjön meg arról, hogy a Illesztőprogram aláírás>Aláírás módTeszt aláírásvan beállítva.

    Képernyőkép az echo tulajdonságoldaláról a Visual Studióban, kiemelve az aláírási mód beállítást.

  7. A Visual Studióban válassza Build>Build Solutionlehetőséget.

    A buildablakoknak egy üzenetnek kell megjelennie, amely jelzi, hogy mindhárom projekt buildje sikeres volt.

Tipp.

Ha buildelési hibaüzenetet tapasztal, a buildelési hibaszámmal állapítsa meg a javítást. Például MSBuild hiba MSB8040 leírja, hogyan lehet a Spectre elleni védelemmel rendelkező könyvtárakkal dolgozni.

  1. A Fájlkezelőben nyissa meg azt a mappát, amely a minta kinyert fájljait tartalmazza. Például, lépjen be a következő útvonalat tartalmazó mappába: C:\DriverSamples\general\echo\kmdf, ha ez a korábban megadott mappa. Ebben a mappában a lefordított illesztőprogram-fájlok helye a Configuration Managerben kiválasztott konfigurációs és platformbeállításoktól függően változik. Ha változatlanul hagyta az alapértelmezett beállításokat, a rendszer a lefordított illesztőprogram-fájlokat egy \x64\Hibakeresési nevű mappába menti egy 64 bites hibakeresési buildhez.

    Lépjen az Autosync-illesztőprogram beépített fájljait tartalmazó mappába: C:\DriverSamples\general\echo\kmdf\driver\AutoSync\x64\Debug.

    A mappának tartalmaznia kell a következő fájlokat:

    Fájl Leírás
    Echo.sys Az illesztőprogram-fájl.
    Echo.inf Az illesztőprogram telepítéséhez szükséges információkat tartalmazó információs (INF) fájl.

    Emellett a echoapp.exe fájl készült, és itt kell lennie: C:\DriverSamples\general\echo\kmdf\exe\x64\Debug.

    Fájl Leírás
    EchoApp.exe Parancssori végrehajtható tesztfájl, amely kommunikál az echo.sys illesztőprogrammal.
  2. Keresse meg az USB-meghajtót, vagy állítson be egy hálózati megosztást a beépített illesztőprogram-fájlok és a teszt EchoApp a gazdagépről a célrendszerbe való másolásához.

A következő szakaszban másolja a kódot a célrendszerbe, majd telepítse és tesztelje az illesztőprogramot.

Telepítse a KMDF echo-illesztőprogram-mintát a célrendszerre

Ebben a szakaszban a DevCon eszközzel telepítse az echo mintaillesztőt.

Az a számítógép, amelyre az illesztőprogramot telepítik, a célszámítógép vagy a tesztszámítógépnéven ismert. Ez a számítógép általában különbözik attól a számítógéptől, amelyen az illesztőprogram-csomagot fejleszti és létrehozza. Az a számítógép, ahol az illesztőprogramot fejleszti és építi, a gazdaszámítógépnéven ismert.

Az illesztőprogram-csomag célszámítógépre való áthelyezésének és az illesztőprogram telepítésének folyamatát az illesztőprogram üzembe helyezésének nevezzük.

Mielőtt üzembe helyez egy teszt-aláírt illesztőprogramot, készítse elő a célszámítógépet a tesztaláírás engedélyezésével. A DevCon eszközt a WDK-telepítésben is meg kell keresnie, és át kell másolnia a célrendszerbe.

Ha telepíteni szeretné az illesztőprogramot a célrendszerre, hajtsa végre az alábbi lépéseket.

Kapcsolja be a teszt üzemmódú aláírt illesztőprogramokat a célrendszeren:

  1. Nyissa meg Windows-beállítások.

  2. A Frissítés és biztonságterületen válassza a Recoverylehetőséget.

  3. A Speciális rendszerindításterületen válassza a Újraindítás mostlehetőséget.

  4. Amikor a számítógép újraindul, válassza Indítási beállításoklehetőséget. Windows 10 rendszerben válassza a Hibaelhárítás>Speciális beállítások>Indítási beállítások lehetőséget, majd válassza Újraindításlehetőséget.

  5. Válassza a Illesztőprogram-aláírás érvényesítésének letiltása lehetőséget az F7 billentyű megnyomásával.

  6. Indítsa újra a célszámítógépet.

A gazdarendszeren nyissa meg a WDK-telepítés Eszközök mappáját, és keresse meg a DevCon eszközt. Keresse meg például a következő mappát: C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe.

Hozzon létre egy mappát a célon a beépített illesztőprogram-csomaghoz, például C:\EchoDriver. Másolja devcon.exe a célrendszerbe. Keresse meg a .cer tanúsítványt a gazdarendszeren. A beépített illesztőprogram-fájlokat tartalmazó mappában található a gazdaszámítógép ugyanazon mappájában. Másolja ki az összes fájlt a gazdaszámítógépen korábban ismertetett beépített illesztőprogramból, és mentse azokat a célszámítógépen létrehozott mappába.

A célszámítógépen jelölje ki és tartsa lenyomva a tanúsítványfájlt, vagy kattintson a jobb gombbal a tanúsítványfájlra, majd válassza a Telepítéslehetőséget, majd kövesse az utasításokat a teszttanúsítvány telepítéséhez.

Ha részletesebb útmutatásra van szüksége a célszámítógép beállításához, olvassa el Számítógép előkészítése manuális illesztőprogram-üzembe helyezésicímű témakört.

Az alábbi utasítások bemutatják, hogyan telepítheti és tesztelheti a mintaillesztőt. Az illesztőprogram telepítéséhez használt devcon eszköz általános szintaxisa:

Console
devcon install <INF file> <hardware ID>

Az illesztőprogram telepítéséhez szükséges INF-fájl echo.inf. Az inf fájl tartalmazza a echo.systelepítéséhez szükséges hardverazonosítót. Az "echo-minta" esetében a hardverazonosító a következő: root\ECHO.

A célszámítógépen nyisson meg egy parancssori ablakot rendszergazdaként. Lépjen az illesztőprogram-csomag mappájába, és írja be a következő parancsot:

Console
devcon install echo.inf root\ECHO

Ha hibaüzenetet kap arról, hogy a devcon nem felismerhető, próbálja meg hozzáadni az elérési utat a devcon eszközhöz. Ha például egy C:\Toolsnevű mappába másolta, próbálkozzon a következő paranccsal:

Console
c:\tools\devcon install echo.inf root\ECHO

Megjelenik egy párbeszédpanel, amely azt jelzi, hogy a tesztmeghajtó nem aláírt illesztőprogram. Válassza Az illesztőprogramot mégis telepíti a folytatáshoz.

Képernyőkép a Windows biztonsági figyelmeztetéséről, amely szerint a Windows nem tudja ellenőrizni az illesztőprogram-szoftver közzétevőjét.

Tipp.

 Ha bármilyen probléma merül fel a telepítéssel kapcsolatban, további információt az alábbi fájlban talál. %windir%\inf\setupapi.dev.log

A mintaillesztő sikeres telepítése után készen áll a tesztelésre.

A célszámítógép parancssori ablakában adja meg devmgmt az Eszközkezelő megnyitásához. Az Eszközkezelőben a Nézet menüben válassza Eszközök típus szerint lehetőséget. Az eszközfán keresse meg WDF-mintaillesztő a eszközminta csomópontban.

Képernyőkép az Eszközkezelő fájáról, amely kiemeli a WDF példa echo-illesztőt.

Az illesztőprogram működésének megerősítéséhez írja be a echoapp parancsot a teszt echoalkalmazás elindításához.

dbgcmd
C:\Samples\KMDF_Echo_Sample> echoapp
DevicePath: \\?\root#sample#0005#{cdc35b6e-0be4-4936-bf5f-5537380a7c1a}
Opened device successfully
512 Pattern Bytes Written successfully
512 Pattern Bytes Read successfully
Pattern Verified successfully
30720 Pattern Bytes Written successfully
30720 Pattern Bytes Read successfully
Pattern Verified successfully

Az illesztőprogram adatainak megjelenítése a WinDbg használatával

Ebben a szakaszban állítsa be a szimbólum elérési útját, és használjon kernel hibakereső parancsokat a KMDF echo-mintaillesztővel kapcsolatos információk megjelenítéséhez.

A sofverinformációk megtekintéséhez:

  1. A gazdarendszeren, ha bezárta a hibakeresőt, nyissa meg újra a következő paranccsal a rendszergazda parancssori ablakában.

    dbgcmd
    WinDbg -k net:port=50000,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    
  2. A Ctrl+Break (Scroll Lock) billentyűkombinációval törhet be a célrendszeren futó kódba.

  3. Ha a Microsoft szimbólumkiszolgálóhoz vezető szimbólumok elérési útját szeretné beállítani a WinDbg környezetben, használja a .symfix parancsot.

    dbgcmd
    0: kd> .symfix
    
  4. Ha hozzá szeretné adni a helyi szimbólum helyét a helyi szimbólumok használatához, adja hozzá az elérési utat .sympath+, majd .reload /f.

    dbgcmd
    0: kd> .sympath+ C:\DriverSamples\general\echo\kmdf
    0: kd> .reload /f
    

    A .reload parancs a /f kényszerítési beállítással törli a megadott modul összes szimbóluminformációit, és újra betölti a szimbólumokat. Bizonyos esetekben ez a parancs újra betölti vagy kiüríti magát a modult.

A WinDbg által biztosított speciális funkciók használatához be kell töltenie a megfelelő szimbólumokat. Ha nincsenek megfelelően konfigurálva a szimbólumok, a szimbólumoktól függő funkciók használatakor olyan üzeneteket kap, amelyek jelzik, hogy a szimbólumok nem érhetők el.

dbgcmd
0:000> dv
Unable to enumerate locals, HRESULT 0x80004005
Private symbols (symbols.pri) are required for locals.
Type “.hh dbgerr005” for details.

Számos módszer használható szimbólumok kezelésére. Számos esetben konfigurálhatja a számítógépet úgy, hogy a microsoft által biztosított szimbólumkiszolgálóról hozzáférjen a szimbólumokhoz, amikor szükség van rájuk. Ez a labor ezt a megközelítést használja. Ha a környezet szimbólumai más helyen találhatók, módosítsa a hely használatának lépéseit. További információ: Windows hibakeresőszimbólum elérési útja.

A forráskeresés végrehajtásához létre kell készítenie a bináris fájlok ellenőrzött (hibakeresési) verzióját. A fordító létrehoz szimbólumfájlokat (.pdb fájlokat). Ezek a szimbólumfájlok azt mutatják meg a hibakeresőnek, hogy a bináris utasítások hogyan felelnek meg a forrásvonalaknak. Maguknak a tényleges forrásfájloknak is elérhetőnek kell lenniük a hibakereső számára.

A szimbólumfájlok nem tartalmazzák a forráskód szövegét. Hibakeresés esetén a legjobb, ha a linker nem optimalizálja a kódot. A forráskeresés és a helyi változókhoz való hozzáférés nehezebb, és néha szinte lehetetlen, ha a kód optimalizálva lett. Ha problémái vannak a helyi változók vagy forrásvonalak megtekintésével, adja meg a következő összeállítási beállításokat:

Console
set COMPILE_DEBUG=1
set ENABLE_OPTIMIZER=0
  1. Adja meg a következő parancsot a hibakereső parancsterületén az echo-illesztőprogram információinak megjelenítéséhez:

    dbgcmd
    0: kd> lm m echo* v
    Browse full module list
    start             end                 module name
    fffff801`4ae80000 fffff801`4ae89000   ECHO       (private pdb symbols)  C:\Samples\KMDF_ECHO_SAMPLE\echo.pdb
        Loaded symbol image file: ECHO.sys
        Image path: \SystemRoot\system32\DRIVERS\ECHO.sys
        Image name: ECHO.sys
    ...  
    

    További információ: lm.

  2. Mivel ezt a laborkészletet korábban prefer_dml-ra állították, a kimenet egyes elemei olyan élő hivatkozások, amelyeket kiválaszthat. Válassza a az összes globális szimbólum böngészése hivatkozást a hibakeresési kimenetben az "a" betűvel kezdődő elemek szimbólumaival kapcsolatos információk megjelenítéséhez.

    dbgcmd
    0: kd> x /D Echo!a*
    
  3. A visszhangminta nem tartalmaz "a" betűvel kezdődő szimbólumokat, ezért írja be a x ECHO!Echo*, hogy megjelenítse az "Echo" betűvel kezdődő echo-illesztőprogramhoz társított összes szimbólum adatait.

    dbgcmd
    0: kd> x ECHO!Echo*
    fffff801`0bf95690 ECHO!EchoEvtIoQueueContextDestroy (void *)
    fffff801`0bf95000 ECHO!EchoEvtDeviceSelfManagedIoStart (struct WDFDEVICE__ *)
    fffff801`0bf95ac0 ECHO!EchoEvtTimerFunc (struct WDFTIMER__ *)
    fffff801`0bf9b120 ECHO!EchoEvtDeviceSelfManagedIoSuspend (struct WDFDEVICE__ *)
    ...
    

    További információ: x (Szimbólumok vizsgálata).

  4. A !lmi bővítmény részletes információkat jelenít meg egy modulról. Adja meg a !lmi echo. A kimenetnek hasonlónak kell lennie a példában látható szöveghez:

    dbgcmd
    0: kd> !lmi echo
    Loaded Module Info: [echo] 
             Module: ECHO
       Base Address: fffff8010bf94000
         Image Name: ECHO.sys
    … 
    
  5. A !dh kiterjesztéssel megjelenítheti a fejlécadatokat az alábbi példában látható módon:

    dbgcmd
    0: kd> !dh echo
    
    File Type: EXECUTABLE IMAGE
    FILE HEADER VALUES
         14C machine (i386)
           6 number of sections
    54AD8A42 time date stamp Wed Jan 07 11:34:26 2015
    ...
    
  6. Az alapértelmezett hibakeresési bitmaszk módosításához adja meg a következőket, hogy a célrendszer összes hibakeresési üzenete megjelenjen a hibakeresőben:

    dbgcmd
    0: kd> ed nt!Kd_DEFAULT_MASK 0xFFFFFFFF
    

    Egyes illesztőprogramok további információkat jelenítenek meg a 0xFFFFFFFF maszkjának használatakor. Állítsa a maszkot 0x00000000, ha csökkenteni szeretné a megjelenített információk mennyiségét.

    dbgcmd
    0: kd> ed nt!Kd_DEFAULT_MASK 0x00000000
    

    A dd paranccsal győződjön meg arról, hogy a maszk az összes hibakereső üzenet megjelenítésére van beállítva.

    dbgcmd
    0: kd> dd nt!kd_DEFAULT_MASK 
    fffff802`bb4057c0  ffffffff 00000000 00000000 00000000
    fffff802`bb4057d0  00000000 00000000 00000000 00000000
    fffff802`bb4057e0  00000001 00000000 00000000 00000000
    fffff802`bb4057f0  00000000 00000000 00000000 00000000
    fffff802`bb405800  00000000 00000000 00000000 00000000
    fffff802`bb405810  00000000 00000000 00000000 00000000
    fffff802`bb405820  00000000 00000000 00000000 00000000
    fffff802`bb405830  00000000 00000000 00000000 00000000
    

Plug and Play eszközfa adatainak megjelenítése

Ebben a szakaszban az echo-mintaeszköz illesztőprogramjáról és a Plug and Play eszközfájában található tartózkodási helyére vonatkozó információkat jelenítheti meg.

A Plug and Play eszközfában található eszközillesztővel kapcsolatos információk hasznosak lehetnek a hibaelhárításhoz. Ha például egy eszközillesztő nem található az eszközfán, az eszközillesztő telepítésével kapcsolatos probléma merülhet fel.

További információ az eszközcsomópont hibakeresési bővítményéről: !devnode.

  1. A gazdarendszeren a Plug and Play eszközfa összes eszközcsomópontjának megtekintéséhez írja be a !devnode 0 1 parancsot.

    dbgcmd
    0: kd> !devnode 0 1
    Dumping IopRootDeviceNode (= 0xffffe0005a3a8d30)
    DevNode 0xffffe0005a3a8d30 for PDO 0xffffe0005a3a9e50
      InstancePath is "HTREE\ROOT\0"
      State = DeviceNodeStarted (0x308)
      Previous State = DeviceNodeEnumerateCompletion (0x30d)
      DevNode 0xffffe0005a3a3d30 for PDO 0xffffe0005a3a4e50
        InstancePath is "ROOT\volmgr\0000"
        ServiceName is "volmgr"
        State = DeviceNodeStarted (0x308)
        Previous State = DeviceNodeEnumerateCompletion (0x30d)
        DevNode 0xffffe0005a324560 for PDO 0xffffe0005bd95ca0…
    …
    
  2. A Ctrl+F billentyűkombinációval keresse meg az eszközillesztő nevét a létrehozott kimenetben, echo.

    Képernyőkép a WinDbg Keresés párbeszédpaneljéről, amely az

  3. Az echo-eszközillesztőt be kell tölteni. A !devnode 0 1 echo paranccsal megjelenítheti az echo-eszközillesztőhöz társított Plug and Play-információkat az alábbi példában látható módon:

    dbgcmd
    0: Kd> !devnode 0 1 echo
    Dumping IopRootDeviceNode (= 0xffffe0007b725d30)
    DevNode 0xffffe0007b71a630 for PDO 0xffffe0007b71a960
      InstancePath is "ROOT\SAMPLE\0000"
      ServiceName is "ECHO"
      State = DeviceNodeStarted (0x308)
      Previous State = DeviceNodeEnumerateCompletion (0x30d)
    …
    
  4. Az előző parancsban megjelenített kimenet tartalmazza az illesztőprogram futó példányához társított PDO-t, ebben a példában 0xffffe0007b71a960. Adja meg a !devobj <PDO address> parancsot az echo-eszközillesztőhöz társított Plug and Play-információk megjelenítéséhez. A számítógépén megjelenő !devnode PDO címet használja, ne az itt láthatót.

    dbgcmd
    0: kd> !devobj 0xffffe0007b71a960
    Device object (ffffe0007b71a960) is for:
     0000000e \Driver\PnpManager DriverObject ffffe0007b727e60
    Current Irp 00000000 RefCount 0 Type 00000004 Flags 00001040
    Dacl ffffc102c9b36031 DevExt 00000000 DevObjExt ffffe0007b71aab0 DevNode ffffe0007b71a630 
    ExtensionFlags (0x00000800)  DOE_DEFAULT_SD_PRESENT
    Characteristics (0x00000180)  FILE_AUTOGENERATED_DEVICE_NAME, FILE_DEVICE_SECURE_OPEN
    AttachedDevice (Upper) ffffe000801fee20 \Driver\ECHO
    Device queue is not busy.
    
  5. A !devnode 0 1 parancsban megjelenített kimenet tartalmazza az illesztőprogramod futó példányához társított PDO-címet, ebben a példában ez 0xffffe0007b71a960. Adja meg a !devstack <PDO address> parancsot az eszközillesztőhöz társított Plug and Play-információk megjelenítéséhez. A !devnode által a számítógépén megjelenített PDO-címet használja, nem pedig az ebben a példában látható címet.

    dbgcmd
    0: kd> !devstack 0xffffe0007b71a960
      !DevObj           !DrvObj            !DevExt           ObjectName
      ffffe000801fee20  \Driver\ECHO       ffffe0007f72eff0  
    > ffffe0007b71a960  \Driver\PnpManager 00000000  0000000e
    !DevNode ffffe0007b71a630 :
      DeviceInst is "ROOT\SAMPLE\0000"
      ServiceName is "ECHO"
    

A kimenet azt mutatja, hogy meglehetősen egyszerű eszközillesztővel rendelkezik. Az echo-illesztőprogram a PnPManager csomópont gyermeke. PnPManager egy gyökércsomópont.

Console
\Driver\ECHO
\Driver\PnpManager

Ez az ábra egy összetettebb eszközcsomópontfát mutat be.

körülbelül 20 csomópontból álló eszközcsomópontfát ábrázoló diagram.

Az összetettebb illesztőprogram-veremekről további információt Illesztőprogram-veremek és Eszközcsomópontok és eszközveremekcímű témakörben talál.

Töréspontok és forráskód használata

Ebben a szakaszban állítsa be a töréspontokat, és egy lépésben halad végig a kernel módú forráskódon.

Ha valós időben szeretné ellenőrizni a változók értékeit, engedélyezze a töréspontokat, és állítsa be a forráskód elérési útját.

A töréspontok egy adott kódsoron leállítja a kódvégrehajtást. Lépjen tovább a kódban ettől a ponttól a kód adott szakaszának hibakereséséhez.

Ha hibakeresési paranccsal szeretne töréspontot beállítani, használja az alábbi b parancsok egyikét.

Parancs Leírás
bp Beállít egy aktív töréspontot, amíg a modul ki nem kerül a betöltésből.
bu Beállít egy feloldatlan töréspontot, amikor a modul ki van töltve, és újra engedélyezi a modul újratöltését.
bm Töréspontot állít be egy szimbólumhoz. Ez a parancs megfelelően használja bu vagy bp, és lehetővé teszi, hogy a helyettesítő karakterek (*) segítségével töréspontokat állítson be minden olyan szimbólumra, amely megfelel, például az osztály összes metódusára.

További információért lásd: A forráskód hibakeresése a WinDbgszoftverrel.

  1. A gazdarendszeren a WinDbg felhasználói felületén győződjön meg arról, hogy Hibakeresési>Forrás mód engedélyezve van az aktuális WinDbg-munkamenetben.

  2. Adja meg a következő parancsot a helyi kód helyének forrásútvonalhoz való hozzáadásához:

    dbgcmd
    .srcpath+ C:\DriverSamples\KMDF_Echo_Sample\driver\AutoSync
    
  3. Adja meg a következő parancsot a helyi szimbólum helyének a szimbólum elérési úthoz való hozzáadásához:

    dbgcmd
    .sympath+ C:\DriverSamples\KMDF_Echo_Sample\driver\AutoSync
    
  4. A x paranccsal vizsgálja meg az echo-illesztőhöz társított szimbólumokat a törésponthoz használandó függvénynév meghatározásához. A DeviceAdd függvény nevét helyettesítő vagy Ctrl+F billentyűkombinációval is megkeresheti.

    dbgcmd
    0: kd> x ECHO!EchoEvt*
    8b4c7490          ECHO!EchoEvtIoQueueContextDestroy (void *)
    8b4c7000          ECHO!EchoEvtDeviceSelfManagedIoStart (struct WDFDEVICE__ *)
    8b4c7820          ECHO!EchoEvtTimerFunc (struct WDFTIMER__ *)
    8b4cb0e0          ECHO!EchoEvtDeviceSelfManagedIoSuspend (struct WDFDEVICE__ *)
    8b4c75d0          ECHO!EchoEvtIoWrite (struct WDFQUEUE__ *, struct WDFREQUEST__ *, unsigned int)
    8b4cb170          ECHO!EchoEvtDeviceAdd (struct WDFDRIVER__ *, struct 
    …
    

    A kimenet azt mutatja, hogy az echo-illesztőprogram DeviceAdd módszere ECHO!EchoEvtDeviceAdd.

    Másik lehetőségként tekintse át a forráskódot a töréspont függvénynevének megkereséséhez.

  5. Állítsa be a töréspontot a bm paranccsal az illesztőprogram nevével, majd a függvény nevével, például AddDevice, ahol be szeretné állítani a töréspontot, felkiáltójellel elválasztva. Ez a labor a(z) AddDevice-t használja az illesztőprogram betöltésének figyelésére.

    dbgcmd
    0: kd> bm ECHO!EchoEvtDeviceAdd
      1: fffff801`0bf9b1c0 @!"ECHO!EchoEvtDeviceAdd"
    

    Különböző szintaxist használhat olyan változók beállításával együtt, mint a <module>!<symbol>, <class>::<method>,'<file.cpp>:<line number>', vagy több alkalommal is kihagyhatja <condition> <#>. További információ: WinDbg és más Windows hibakeresők feltételes töréspontjai.

  6. Az aktuális töréspontok listázásával ellenőrizheti, hogy a töréspont be van-e állítva a bl parancs beírásával:

    dbgcmd
    0: kd> bl
    1 e fffff801`0bf9b1c0     0001 (0001) ECHO!EchoEvtDeviceAdd
    

    Az itt megjelenített kimenetben az "e" azt jelzi, hogy az 1. számú töréspont engedélyezve van a működéshez.

  7. Indítsa újra a kódvégrehajtást a célrendszeren a g (go) paranccsal.

  8. A célrendszeren, a Windows rendszerben nyissa meg a Device Manager-t az ikon használatával vagy a mmc devmgmt.mscbeírásával. Az Eszközkezelőben bontsa ki a Minták csomópontot.

  9. Jelölje ki és tartsa lenyomva a KMDF echo driver bejegyzést, vagy kattintson rá jobb gombbal, majd válassza a Letiltás lehetőséget a menüből.

  10. Jelölje ki és tartsa lenyomva, vagy kattintson a jobb gombbal a KMDF echoillesztő-bejegyzésére, majd válassza engedélyezése lehetőséget a menüből.

  11. A gazdarendszeren belül, amikor az illesztőprogram engedélyezve van, az AddDevice hibakeresési töréspontnak aktiválódnia kell. A célrendszer illesztőprogram-kódjának végrehajtása leáll. A töréspont elérésekor a végrehajtást le kell állítani az AddDevice rutin elején. A hibakeresési parancs kimenete Breakpoint 1 hitjelenik meg.

    Képernyőkép a WinDbg-ről, amely mintakód helyi kódját és parancsablakait jeleníti meg.

  12. Lépjen végig a kódsoron a p paranccsal, vagy nyomja le az F10 billentyűt, amíg el nem éri a AddDevice rutin következő végét. A zárójel karakter (}) az ábrán látható módon ki van emelve.

    Képernyőkép a kódablakról, amelyen az AddDevice rutin elején kiemelt kapcsos karakter látható.

A következő szakaszban vizsgálja meg a változók állapotát a DeviceAdd-kód végrehajtása után.

A meglévő töréspontok az alábbi parancsokkal módosíthatók:

Parancs Leírás
bl A töréspontok listája.
bc Törli a töréspontot a listából. Az bc * használatával törölje az összes töréspontot.
bd Letilt egy töréspontot. Az bd * használatával tiltsa le az összes töréspontot.
be Töréspont engedélyezése. Az összes töréspont engedélyezéséhez használja be *.

A töréspontokat a WinDbg felhasználói felületén is módosíthatja.

Olyan töréspontokat is beállíthat, amelyek memóriahely elérésekor aktiválhatók. Használja a ba (hozzáférés megszakítása) parancsot a következő szintaxissal:

dbgcmd
ba <access> <size> <address> {options}
Opció Leírás
e végrehajtás: amikor a CPU lekéri az utasítást a címről
r olvasás/írás: amikor a CPU a címre olvas vagy ír
w írás: amikor a CPU a címre ír

Egyszerre csak négy adattörési pontot állíthat be. Önön múlik, hogy megfelelően igazítja-e az adatokat a töréspont aktiválásához. A szavaknak 2-gyel osztható címekben, a dwords-nek 4-gyel, a quad szavaknak pedig 0-tal vagy 8-tal kell végződniük.

Ha például olvasási/írási töréspontot szeretne beállítani egy adott memóriacímre, használhat egy ilyen parancsot.

dbgcmd
ba r 4 0x0003f7bf0

Az alábbi parancsokkal végiglépkedhet a kódon a zárójelekben látható rövid billentyűparancsokkal.

  • Megszakítás (Ctrl+Break). Ez a parancs megszakítja a rendszert mindaddig, amíg a rendszer fut, és kommunikál a WinDbg-vel. A kernel hibakeresőjének sorrendje a Ctrl+C billentyűkombináció.
  • Kurzorhoz futtatás (F7 vagy Ctrl+F10). Helyezze a kurzort egy forrás- vagy szétszerelési ablakba, ahol a végrehajtást el szeretné törni, majd nyomja le az F7 billentyűt. A kódvégrehajtás eljut erre a pontra. Ha a kódvégrehajtás folyamata nem éri el a kurzor által jelzett pontot, a WinDbg nem törne meg. Ez a helyzet akkor fordulhat elő, ha egy feltételes kifejezést nem hajtanak végre.
  • Futtatás (F5). Futtassa addig, amíg töréspontot nem észlel, vagy hibaellenőrzéshez hasonló esemény nem történik.
  • Lépjen át (F10). Ez a parancs azt eredményezi, hogy a kód végrehajtása lépésről lépésre halad, egyszerre egy utasítást vagy lépést hajtva végre. Hívás esetén a kódvégrehajtás a hívott rutin megadása nélkül halad át a híváson. Ha a programozási nyelv C vagy C++ , és a WinDbg forrás módban van, a forrás mód be- vagy kikapcsolható Hibakeresés>Forrás módhasználatával.
  • Belépés (F11). Ez a parancs olyan, mint a lépésenkénti végrehajtás, azzal a kivételrel, hogy a hívás végrehajtása a hívott rutinba kerül.
  • Lépjen ki (Shift+F11). Ez a parancs azt eredményezi, hogy a végrehajtás elérje a hívásverem aktuális rutinját vagy helyét és onnan kilépjen. Ez a parancs akkor hasznos, ha már elég volt a rutinból.

További információ: A forráskód hibakeresése a WinDbg-ben.

Változók és hívásveremek megtekintése

Ebben a szakaszban megjelenítheti a változókkal és a hívásveremekkel kapcsolatos információkat.

Ez a labor feltételezi, hogy a korábban ismertetett eljárással megálltál az AddDevice rutinban. Az itt látható kimenet megtekintéséhez ismételje meg a korábban ismertetett lépéseket, ha szükséges.

A gazdarendszerben a változók megjelenítéséhez használja a nézetet>helyi menüpontot a helyi változók megjelenítéséhez.

Képernyőkép a WinDbg helyi változók ablakáról.

A globális változócím helyének megkereséséhez írja be a ? <variable name>.

  • Kilépés (Shift+F11) – Ez a parancs azt eredményezi, hogy a végrehajtás az aktuális rutinon fut keresztül, majd kilép a hívásverem aktuális helyéről. Ez akkor hasznos, ha már eleget látott a rutinból.

További információért lásd: Forráskód hibakeresése a klasszikus WinDbg az hibakeresési referenciadokumentációban.

8. szakasz: Változók és hívásveremek megtekintése

A 8. szakaszban a változókkal és a hívásveremekkel kapcsolatos információkat fogja megjeleníteni.

Ez a tesztkörnyezet feltételezi, hogy a korábban ismertetett eljárás során megállították az AddDevice rutinnál. A kimeneti megjelenítés itt való megtekintéséhez ismételje meg a korábban ismertetett lépéseket, ha szükséges.

<– A gazdarendszeren

Változók megjelenítése

A helyi változók megjelenítéséhez használja a nézet>menüpontját a helyi menüben.

Képernyőkép a WinDbg helyi változók ablakáról.

globális változók

A globális változó címének helyét a beírásával találja meg? <változó neve>.

helyi változók

Az adott kerethez tartozó összes helyi változó nevét és értékét megjelenítheti a dv parancs beírásával. Egy adott keret összes helyi változójának nevének és értékének megjelenítéséhez írja be a dv parancsot:

dbgcmd
0: kd> dv
         Driver = 0x00001fff`7ff9c838
     DeviceInit = 0xffffd001`51978190
         status = 0n0

A hívásverem azoknak a függvényhívásoknak a láncolata, amelyek a programszámláló aktuális helyére vezettek. A hívásverem legfelső függvénye az aktuális függvény, a következő pedig az a függvény, amelyik az aktuális függvényt hívta, és így tovább.

A hívásverem megjelenítéséhez használja a k* parancsokat.

Parancs Leírás
kb Megjeleníti a verem tartalmát és az első három paramétert.
kp Megjeleníti a veremstruktúrákat és a paraméterek teljes listáját.
kn Lehetővé teszi a verem megtekintését a keretinformációkkal együtt.
  1. A gazdarendszeren, ha elérhetővé szeretné tenni a hívásvermet, válassza nézetet>hívásverem megtekintéséhez. Válassza ki az ablak tetején lévő oszlopokat a további információk megjelenítésének váltásához.

    WinDbg képernyőképe, amely a hívásveremek ablakát mutatja.

  2. A kn paranccsal megjelenítheti a hívásvermet a mintaadapter kódjának hibakeresése közben törésállapotban.

    dbgcmd
    3: kd> kn
    # Child-SP          RetAddr           Call Site
    00 ffffd001`51978110 fffff801`0942f55b ECHO!EchoEvtDeviceAdd+0x66 [c:\Samples\kmdf echo sample\c++\driver\autosync\driver.c @ 138]
    01 (Inline Function) --------`-------- Wdf01000!FxDriverDeviceAdd::Invoke+0x30 [d:\wbrtm\minkernel\wdf\framework\shared\inc\private\common\fxdrivercallbacks.hpp @ 61]
    02 ffffd001`51978150 fffff801`eed8097d Wdf01000!FxDriver::AddDevice+0xab [d:\wbrtm\minkernel\wdf\framework\shared\core\km\fxdriverkm.cpp @ 72]
    03 ffffd001`51978570 fffff801`ef129423 nt!PpvUtilCallAddDevice+0x35 [d:\9142\minkernel\ntos\io\pnpmgr\verifier.c @ 104]
    04 ffffd001`519785b0 fffff801`ef0c4112 nt!PnpCallAddDevice+0x63 [d:\9142\minkernel\ntos\io\pnpmgr\enum.c @ 7397]
    05 ffffd001`51978630 fffff801`ef0c344f nt!PipCallDriverAddDevice+0x6e2 [d:\9142\minkernel\ntos\io\pnpmgr\enum.c @ 3390]
    ...
    

A hívási verem azt mutatja, hogy a kernel (nt) belekódolt a Plug and Play kódba (PnP), amely aztán a meghajtó keretrendszer kódját (WDF) hívta meg, amely később az echo meghajtó DeviceAdd függvényét hívta meg.

Folyamatok és szálak megjelenítése

Ebben a szakaszban a kernel módban futó folyamatokra és szálakra vonatkozó információkat jelenít meg.

Folyamatok

A folyamatinformációkat a !process hibakereső bővítmény használatával jelenítheti meg vagy állíthatja be. Állítson be egy töréspontot a hang lejátszásakor használt folyamat vizsgálatához.

  1. A gazdarendszerben adja meg a dv parancsot a EchoEvtIo rutinhoz társított területi változók vizsgálatához:

    dbgcmd
    0: kd> dv ECHO!EchoEvtIo*
    ECHO!EchoEvtIoQueueContextDestroy
    ECHO!EchoEvtIoWrite
    ECHO!EchoEvtIoRead         
    
  2. Törölje az előző töréspontokat a bc *használatával:

    dbgcmd
    0: kd> bc *  
    
  3. Állítson be egy szimbólumtörési pontot a EchoEvtIo rutinokra az alábbi paranccsal:

    dbgcmd
    0: kd> bm ECHO!EchoEvtIo*
      2: aade5490          @!”ECHO!EchoEvtIoQueueContextDestroy”
      3: aade55d0          @!”ECHO!EchoEvtIoWrite”
      4: aade54c0          @!”ECHO!EchoEvtIoRead”
    
  4. Sorolja fel a töréspontokat annak ellenőrzéséhez, hogy a töréspont megfelelően van-e beállítva:

    dbgcmd
    0: kd> bl
    1 e aabf0490 [c:\Samples\kmdf echo sample\c++\driver\autosync\queue.c @ 197]    0001 (0001) ECHO!EchoEvtIoQueueContextDestroy
    ...
    
  5. Adja meg g a kódvégrehajtás újraindításához:

    dbgcmd
    0: kd> g
    
  6. A célrendszeren futtassa a EchoApp.exe illesztőprogram-tesztprogramot.

  7. A gazdarendszeren a tesztalkalmazás futtatásakor a rendszer meghívja az illesztőprogram I/O-rutinját. Ez a hívás a töréspont kigyulladását okozza, és a célrendszer illesztőprogram-kódjának végrehajtása leáll.

    dbgcmd
    Breakpoint 2 hit
    ECHO!EchoEvtIoWrite:
    fffff801`0bf95810 4c89442418      mov     qword ptr [rsp+18h],r8
    
  8. A !process paranccsal megjelenítheti a echoapp.exefuttatásához használt aktuális folyamatot:

    dbgcmd
    0: kd> !process
    PROCESS ffffe0007e6a7780
        SessionId: 1  Cid: 03c4    Peb: 7ff7cfec4000  ParentCid: 0f34
        DirBase: 1efd1b000  ObjectTable: ffffc001d77978c0  HandleCount:  34.
        Image: echoapp.exe
        VadRoot ffffe000802c79f0 Vads 30 Clone 0 Private 135. Modified 5. Locked 0.
        DeviceMap ffffc001d83c6e80
        Token                             ffffc001cf270050
        ElapsedTime                       00:00:00.052
        UserTime                          00:00:00.000
        KernelTime                        00:00:00.000
        QuotaPoolUsage[PagedPool]         33824
        QuotaPoolUsage[NonPagedPool]      4464
        Working Set Sizes (now,min,max)  (682, 50, 345) (2728KB, 200KB, 1380KB)
        PeakWorkingSetSize                652
        VirtualSize                       16 Mb
        PeakVirtualSize                   16 Mb
        PageFaultCount                    688
        MemoryPriority                    BACKGROUND
        BasePriority                      8
        CommitCharge                      138
    
            THREAD ffffe00080e32080  Cid 03c4.0ec0  Teb: 00007ff7cfece000 Win32Thread: 0000000000000000 RUNNING on processor 1
    

    A kimenet azt mutatja, hogy a folyamat a echoapp.exe szálhoz van társítva, amely akkor futott, amikor az illesztőprogram írási eseményének töréspontját elérte. További információ: !process.

  9. A !process 0 0 az összes folyamat összesítő információinak megjelenítéséhez használható. A kimenetben a Ctrl+F billentyűkombinációval keresse meg a echoapp.exe képhez társított folyamat folyamatcímét. A példában a folyamat címe ffffe0007e6a7780.

    dbgcmd
    ...
    
    PROCESS ffffe0007e6a7780
        SessionId: 1  Cid: 0f68    Peb: 7ff7cfe7a000  ParentCid: 0f34
        DirBase: 1f7fb9000  ObjectTable: ffffc001cec82780  HandleCount:  34.
        Image: echoapp.exe
    
    ...
    
  10. Jegyezze fel a folyamatazonosítót, amely társul a ,echoapp.exe,-vel, hogy később felhasználhassa a laborban. A Ctrl+C billentyűkombinációval is másolhatja a címet a másolási pufferbe későbbi használatra.

    _____________________________________________________(echoapp.exe folyamatcím)

  11. A hibakeresőben szükség szerint adja meg g a kód továbbfuttatásához, amíg echoapp.exe nem fejeződik be. Többször eléri az olvasási és írási esemény töréspontját. Ha echoapp.exe befejeződik, lépjen be a hibakeresőbe a Ctrl+ScrLk (Ctrl+Break) billentyűkombináció lenyomásával.

  12. A !process paranccsal győződjön meg arról, hogy egy másik folyamatot futtat. Az itt látható kimenetben az Rendszer képértékével rendelkező folyamat eltér a Echo Kép értékétől.

    dbgcmd
    1: kd> !process
    PROCESS ffffe0007b65d900
        SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
        DirBase: 001ab000  ObjectTable: ffffc001c9a03000  HandleCount: 786.
        Image: System
        VadRoot ffffe0007ce45930 Vads 14 Clone 0 Private 22. Modified 131605. Locked 64.
        DeviceMap ffffc001c9a0c220
        Token                             ffffc001c9a05530
        ElapsedTime                       21:31:02.516
    ...
    

    A kimenet azt mutatja, hogy az operációs rendszer leállításakor az ffffe0007b65d900 rendszerfolyamat futott.

  13. Az !process parancs segítségével vizsgálja meg azokat a folyamatazonosítókat, amelyek korábban a echoapp.exe címkékkel voltak társítva, és amelyeket rögzített. Adja meg a korábban rögzített echoapp.exe folyamatcímet a példában látható példafolyamat-cím helyett.

    dbgcmd
    0: kd> !process ffffe0007e6a7780
    TYPE mismatch for process object at 82a9acc0
    

    A folyamatobjektum már nem érhető el, mert a echoapp.exe folyamat már nem fut.

Szálak

A szálak megtekintésére és beállítására szolgáló parancsok hasonlóak a folyamatok parancsaihoz. A szálak megtekintéséhez használja a !thread parancsot. Az aktuális szálak beállításához használja .thread.

  1. A gazdarendszeren adja meg a "g" parancsot a hibakeresőben a kód futtatásának újraindításához a célrendszeren.

  2. A célrendszeren futtassa a EchoApp.exe illesztőprogram-tesztprogramot.

  3. A gazdarendszerben a töréspontot eléri a rendszer, és a kódvégrehajtás leáll.

    dbgcmd
    Breakpoint 4 hit
    ECHO!EchoEvtIoRead:
    aade54c0 55              push    ebp
    
  4. A futó szálak megtekintéséhez írja be !thread. Az alábbi példához hasonló információkat kell megjeleníteni:

    dbgcmd
    0: kd>  !thread
    THREAD ffffe000809a0880  Cid 0b28.1158  Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0
    IRP List:
        ffffe0007bc5be10: (0006,01f0) Flags: 00060a30  Mdl: 00000000
    Not impersonating
    DeviceMap                 ffffc001d83c6e80
    Owning Process            ffffe0008096c900       Image:         echoapp.exe
    ...
    

    Jegyezze fel a echoapp.exeképnevét. Ez azt jelzi, hogy a tesztalkalmazáshoz társított szálat vizsgáljuk.

  5. A !process paranccsal állapítsa meg, hogy ez a szál-e az egyetlen szál, amely fut az echoapp.exe-hoz társított folyamatban. A folyamatban lévő futó szál szálszáma ugyanaz, mint a !thread parancs által megjelenített szál.

    dbgcmd
    0: kd> !process
    PROCESS ffffe0008096c900
        SessionId: 1  Cid: 0b28    Peb: 7ff7d00df000  ParentCid: 0f34
        DirBase: 1fb746000  ObjectTable: ffffc001db6b52c0  HandleCount:  34.
        Image: echoapp.exe
        VadRoot ffffe000800cf920 Vads 30 Clone 0 Private 135. Modified 8. Locked 0.
        DeviceMap ffffc001d83c6e80
        Token                             ffffc001cf5dc050
        ElapsedTime                       00:00:00.048
        UserTime                          00:00:00.000
        KernelTime                        00:00:00.000
        QuotaPoolUsage[PagedPool]         33824
        QuotaPoolUsage[NonPagedPool]      4464
        Working Set Sizes (now,min,max)  (681, 50, 345) (2724KB, 200KB, 1380KB)
        PeakWorkingSetSize                651
        VirtualSize                       16 Mb
        PeakVirtualSize                   16 Mb
        PageFaultCount                    686
        MemoryPriority                    BACKGROUND
        BasePriority                      8
        CommitCharge                      138
    
            THREAD ffffe000809a0880  Cid 0b28.1158  Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0
    
  6. A !process 0 0 paranccsal keresse meg két kapcsolódó folyamat folyamatcímét, és jegyezze fel itt ezeket a folyamatcímeket.

    Cmd.exe: ____________________________________________________________

    EchoApp.exe: _______________________________________________________

    dbgcmd
    0: kd> !process 0 0 
    
    …
    
    PROCESS ffffe0007bbde900
        SessionId: 1  Cid: 0f34    Peb: 7ff72dfa7000  ParentCid: 0c64
        DirBase: 19c5fa000  ObjectTable: ffffc001d8c2f300  HandleCount:  31.
        Image: cmd.exe
    …
    PROCESS ffffe0008096c900
        SessionId: 1  Cid: 0b28    Peb: 7ff7d00df000  ParentCid: 0f34
        DirBase: 1fb746000  ObjectTable: ffffc001db6b52c0  HandleCount:  34.
        Image: echoapp.exe
    …
    

    Alternatívaként használhatja a !process 0 17-t a folyamat részletes információinak megjelenítéséhez. A parancs kimenete hosszadalmas lehet. A kimenet a Ctrl+F billentyűkombinációval kereshető.

  7. A !process paranccsal listázhatja a számítógépet futtató mindkét folyamat folyamatadatait. Adja meg a folyamat címét a !process 0 0 kimenetéből, nem pedig az ebben a példában látható címből.

    Ez a példakimenet a korábban rögzített cmd.exe folyamatazonosítóra szolgál. A folyamatazonosító képének neve cmd.exe.

    dbgcmd
    0: kd>  !process ffffe0007bbde900
    PROCESS ffffe0007bbde900
        SessionId: 1  Cid: 0f34    Peb: 7ff72dfa7000  ParentCid: 0c64
        DirBase: 19c5fa000  ObjectTable: ffffc001d8c2f300  HandleCount:  31.
        Image: cmd.exe
        VadRoot ffffe0007bb8e7b0 Vads 25 Clone 0 Private 117. Modified 20. Locked 0.
        DeviceMap ffffc001d83c6e80
        Token                             ffffc001d8c48050
        ElapsedTime                       21:33:05.840
        UserTime                          00:00:00.000
        KernelTime                        00:00:00.000
        QuotaPoolUsage[PagedPool]         24656
        QuotaPoolUsage[NonPagedPool]      3184
        Working Set Sizes (now,min,max)  (261, 50, 345) (1044KB, 200KB, 1380KB)
        PeakWorkingSetSize                616
        VirtualSize                       2097164 Mb
        PeakVirtualSize                   2097165 Mb
        PageFaultCount                    823
        MemoryPriority                    FOREGROUND
        BasePriority                      8
        CommitCharge                      381
    
            THREAD ffffe0007cf34880  Cid 0f34.0f1c  Teb: 00007ff72dfae000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable
                ffffe0008096c900  ProcessObject
            Not impersonating
    ...
    

    Ez a példakimenet a korábban rögzített echoapp.exe folyamatazonosítóra szolgál.

    dbgcmd
    0: kd>  !process ffffe0008096c900
    PROCESS ffffe0008096c900
        SessionId: 1  Cid: 0b28    Peb: 7ff7d00df000  ParentCid: 0f34
        DirBase: 1fb746000  ObjectTable: ffffc001db6b52c0  HandleCount:  34.
        Image: echoapp.exe
        VadRoot ffffe000800cf920 Vads 30 Clone 0 Private 135. Modified 8. Locked 0.
        DeviceMap ffffc001d83c6e80
        Token                             ffffc001cf5dc050
        ElapsedTime                       00:00:00.048
        UserTime                          00:00:00.000
        KernelTime                        00:00:00.000
        QuotaPoolUsage[PagedPool]         33824
        QuotaPoolUsage[NonPagedPool]      4464
        Working Set Sizes (now,min,max)  (681, 50, 345) (2724KB, 200KB, 1380KB)
        PeakWorkingSetSize                651
        VirtualSize                       16 Mb
        PeakVirtualSize                   16 Mb
        PageFaultCount                    686
        MemoryPriority                    BACKGROUND
        BasePriority                      8
        CommitCharge                      138
    
            THREAD ffffe000809a0880  Cid 0b28.1158  Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0
            IRP List:
                ffffe0007bc5be10: (0006,01f0) Flags: 00060a30  Mdl: 00000000
            Not impersonating
    ...
    
  8. Jegyezze fel a két folyamathoz tartozó első szálcímeket itt.

    Cmd.exe: ____________________________________________________

    EchoApp.exe: _________________________________________________

  9. A !Thread paranccsal megjelenítheti az aktuális szál adatait.

    dbgcmd
    0: kd>  !Thread
    THREAD ffffe000809a0880  Cid 0b28.1158  Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0
    IRP List:
        ffffe0007bc5be10: (0006,01f0) Flags: 00060a30  Mdl: 00000000
    Not impersonating
    DeviceMap                 ffffc001d83c6e80
    Owning Process            ffffe0008096c900       Image:         echoapp.exe
    Attached Process          N/A            Image:         N/A
    ...
    

    A várakozásoknak megfelelően a jelenlegi szál az a szál, amelyik az echoapp.exe-hez van társítva, és futó állapotban van.

  10. A !Thread paranccsal megjelenítheti az cmd.exe folyamathoz társított szál adatait. Adja meg a korábban rögzített szálcímet.

    dbgcmd
    0: kd> !Thread ffffe0007cf34880
    THREAD ffffe0007cf34880  Cid 0f34.0f1c  Teb: 00007ff72dfae000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable
        ffffe0008096c900  ProcessObject
    Not impersonating
    DeviceMap                 ffffc001d83c6e80
    Owning Process            ffffe0007bbde900       Image:         cmd.exe
    Attached Process          N/A            Image:         N/A
    Wait Start TickCount      4134621        Ticks: 0
    Context Switch Count      4056           IdealProcessor: 0             
    UserTime                  00:00:00.000
    KernelTime                00:00:01.421
    Win32 Start Address 0x00007ff72e9d6e20
    Stack Init ffffd0015551dc90 Current ffffd0015551d760
    Base ffffd0015551e000 Limit ffffd00155518000 Call 0
    Priority 14 BasePriority 8 UnusualBoost 3 ForegroundBoost 2 IoPriority 2 PagePriority 5
    Child-SP          RetAddr           : Args to Child                                                           : Call Site
    ffffd001`5551d7a0 fffff801`eed184fe : fffff801`eef81180 ffffe000`7cf34880 00000000`fffffffe 00000000`fffffffe : nt!KiSwapContext+0x76 [d:\9142\minkernel\ntos\ke\amd64\ctxswap.asm @ 109]
    ffffd001`5551d8e0 fffff801`eed17f79 : ffff03a5`ca56a3c8 000000de`b6a6e990 000000de`b6a6e990 00007ff7`d00df000 : nt!KiSwapThread+0x14e [d:\9142\minkernel\ntos\ke\thredsup.c @ 6347]
    ffffd001`5551d980 fffff801`eecea340 : ffffd001`5551da18 00000000`00000000 00000000`00000000 00000000`00000388 : nt!KiCommitThreadWait+0x129 [d:\9142\minkernel\ntos\ke\waitsup.c @ 619]
    ...
    

    Ez a szál társítva van cmd.exe-vel, és várakozási állapotban van.

  11. Adja meg a várakozási CMD.exe szál szálcímét a környezetnek az adott várakozási szálra való módosításához.

    dbgcmd
    0: kd> .Thread ffffe0007cf34880
    Implicit thread is now ffffe000`7cf34880
    
  12. A k paranccsal megtekintheti a várakozási szálhoz társított hívásvermet.

    dbgcmd
    0: kd> k
      *** Stack trace for last set context - .thread/.cxr resets it
    # Child-SP          RetAddr           Call Site
    00 ffffd001`5551d7a0 fffff801`eed184fe nt!KiSwapContext+0x76 [d:\9142\minkernel\ntos\ke\amd64\ctxswap.asm @ 109]
    01 ffffd001`5551d8e0 fffff801`eed17f79 nt!KiSwapThread+0x14e [d:\9142\minkernel\ntos\ke\thredsup.c @ 6347]
    02 ffffd001`5551d980 fffff801`eecea340 nt!KiCommitThreadWait+0x129 [d:\9142\minkernel\ntos\ke\waitsup.c @ 619]
    03 ffffd001`5551da00 fffff801`ef02e642 nt!KeWaitForSingleObject+0x2c0 [d:\9142\minkernel\ntos\ke\wait.c @ 683]
    ...
    

    Az olyan hívásveremelemek, mint például a KiCommitThreadWait azt jelzik, hogy ez a szál nem a várt módon fut.

További információ a szálakról és folyamatokról az alábbi hivatkozásokban található:

IRQL, regisztráció és a WinDbg-munkamenet befejezése

Ebben a szakaszban jelenítse meg a megszakításkérési szintet (IRQL) és a regiszterek tartalmát.

A mentett IRQL megtekintése

Az IRQL a megszakítási karbantartás prioritásának kezelésére szolgál. Minden processzor rendelkezik olyan IRQL-beállítással, amelyet a szálak emelhetnek vagy csökkenthetik. A processzor IRQL-beállításainál vagy alatt bekövetkező megszakítások maszkoltak, és nem zavarják az aktuális műveletet. A processzor IRQL-beállítása feletti megszakítások elsőbbséget élveznek az aktuális művelettel szemben.

A gazdarendszeren a !irql bővítmény megjeleníti az IRQL-t a célszámítógép aktuális processzorán a hibakereső törése előtt. Amikor a célszámítógép belép a hibakeresési módba, az IRQL megváltozik, de az IRQL, amely a hibakeresési megszakítás előtt volt érvényes, a !irqláltal kerül megjelenítésre.

dbgcmd
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)

A regiszterek megtekintése

A gazdarendszeren az aktuális processzor aktuális szálának regisztráinak tartalmát az r (Regisztrálások) paranccsal jelenítheti meg.

dbgcmd
0: kd> r
rax=000000000000c301 rbx=ffffe00173eed880 rcx=0000000000000001
rdx=000000d800000000 rsi=ffffe00173eed8e0 rdi=ffffe00173eed8f0
rip=fffff803bb757020 rsp=ffffd001f01f8988 rbp=ffffe00173f0b620
 r8=000000000000003e  r9=ffffe00167a4a000 r10=000000000000001e
r11=ffffd001f01f88f8 r12=0000000000000000 r13=ffffd001f01efdc0
r14=0000000000000001 r15=0000000000000000
iopl=0         nv up ei pl nz na pe nc
cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
nt!DbgBreakPointWithStatus:
fffff803`bb757020 cc              int     3

Másik lehetőségként megjelenítheti a regiszterek tartalmát a >Regiszterekmegtekintése lehetőség kiválasztásával. További információ: r (Regisztrálások).

A regiszterek tartalmának megtekintése hasznos lehet az assembly nyelvű kód végrehajtásának lépésenkénti követésében és más helyzetekben. További információ az assembly nyelv szétszereléséről: Jegyzetekkel ellátott x86 szétszerelés és Jegyzetekkel ellátott x64 szétszerelés.

A regiszter tartalmáról további információt x86 architektúra és x64 architektúracímű cikkben talál.

A WinDbg-munkamenet befejezése

Ha szeretné csatlakoztatva hagyni a hibakeresőt, de a cél számítógépen kíván dolgozni, törölje a töréspontokat a bc *használatával, hogy a célszámítógép ne próbáljon csatlakozni a gazdagép hibakeresőjéhez. Ezután a g paranccsal hagyja újra futtatni a célszámítógépet.

A hibakeresési munkamenet befejezéséhez a gazdarendszeren szakítsa meg a hibakeresőt, és adja meg a qd (Kilépés és leválasztás) parancsot, vagy válassza a menüből a Hibakeresés leállítása lehetőséget.

dbgcmd
0: kd> qd

További információ: Hibakeresési munkamenet befejezése a WinDbg.

Windows hibakeresési erőforrások

További információ a Windows hibakereséséről. Néhány ilyen könyv a Windows korábbi verzióit, például a Windows Vista-t használja a példájukban, de a tárgyalt fogalmak a Windows legtöbb verziójára érvényesek.

Lásd még: