Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Kernel módú hibakeresés esetén számos folyamat, szál és néha felhasználói munkamenet fut egyszerre. Ezért az olyan kifejezések, mint a "virtuális cím 0x80002000" vagy az " eax register" nem egyértelműek. Meg kell adnia azt a környezetet , amelyben az ilyen kifejezések értelmezhetők.
A hibakereső öt különböző környezettel rendelkezik, amelyeket a hibakeresés során állíthat be:
A munkamenet-környezet az alapértelmezett felhasználói munkamenetet jelzi.
A folyamatkörnyezet határozza meg, hogy a hibakereső hogyan értelmezi a virtuális címeket.
A felhasználói módú címkörnyezet szinte soha nem van közvetlenül beállítva. Ez a környezet automatikusan be van állítva a folyamatkörnyezet módosításakor.
A regiszter környezet határozza meg, hogy a hibakereső hogyan értelmezi a regisztereket, és irányítja a veremkövetés eredményeit is. Ezt a kontextust szálkörnyezetnek is nevezik, bár ez a kifejezés nem teljesen pontos. Az explicit környezet egyfajta regiszterkörnyezet is. Ha explicit környezetet ad meg, a rendszer ezt a környezetet használja az aktuális regisztrációs környezet helyett.
A helyi környezet határozza meg, hogy a hibakereső hogyan értelmezi a helyi változókat. Ezt a környezetet hatókörnek is nevezik.
Munkamenet-környezet
Egyszerre több bejelentkezési munkamenet is futtatható. Minden bejelentkezési munkamenet saját folyamatokkal rendelkezik.
A !munkamenet-bővítmény megjeleníti az összes bejelentkezési munkamenetet, vagy módosítja az aktuális munkamenet-környezetet.
A munkamenet-környezetet a !sprocess és a !spoolused bővítmény használja, amikor a munkamenet számát "-2" értékként adja meg.
A munkamenet-környezet módosításakor a folyamatkörnyezet automatikusan az adott munkamenet aktív folyamatára változik.
Folyamatkörnyezet
Minden folyamat saját lapkönyvtárral rendelkezik, amely rögzíti a virtuális címek fizikai címekhez való hozzárendelését. Amikor egy folyamat bármely szála fut, a Windows operációs rendszer ezen a lapkönyvtáron értelmezi a virtuális címeket.
A felhasználói módú hibakeresés során az aktuális folyamat határozza meg a folyamatkörnyezetet. A hibakereső parancsokban, bővítményekben és hibakeresési információk ablakaiban használt virtuális címeket az aktuális folyamat lapkönyvtárával értelmezi a rendszer.
A kernel módú hibakeresés során a folyamatkörnyezetet a .process (Folyamatkörnyezet beállítása) paranccsal állíthatja be . Ezzel a paranccsal kiválaszthatja, hogy melyik folyamat lapkönyvtárát használja a virtuális címek értelmezéséhez. A folyamatkörnyezet beállítása után ezt a környezetet bármely olyan parancsban használhatja, amely címeket vesz fel. Ezen a címen akár töréspontokat is beállíthat. Ha az invazív hibakeresés megadásához a .process parancsba beiktat egy /i lehetőséget, a kernel hibakeresőjével töréspontokat is beállíthat a felhasználói térben.
A rendszermag hibakeresőjének felhasználói módú töréspontjait úgy is beállíthatja, hogy egy folyamatspecifikus töréspontot használ egy kerneltérfüggvényen. Állítson be stratégiai töréspontokat, és várja meg, amíg létrejön a megfelelő környezet.
A felhasználói módú címkörnyezet a folyamatkörnyezet része. Általában nem kell közvetlenül beállítania a felhasználói módú címkörnyezetet. Ha beállítja a folyamatkörnyezetet, a felhasználói módú címkörnyezet automatikusan a folyamat megfelelő laptáblájának címtárbázisára változik.
Ha a folyamatkörnyezetet kernel módú hibakeresés során állítja be, a folyamatkörnyezet megmarad, amíg egy másik .process parancs nem módosítja a környezetet. A felhasználói módú címkörnyezet is megmarad, amíg egy .process vagy .context parancs nem módosítja azt. Ezek a környezetek nem változnak a célszámítógép végrehajtásakor, és nem érinti őket a regisztrációs környezet vagy a helyi környezet módosítása.
Kontextus regisztrálása
Minden szál saját regiszterértékekkel rendelkezik. Ezek az értékek a processzorregisztrálókban vannak tárolva, amikor a szál fut, és a memóriában vannak tárolva, amikor egy másik szál fut.
A felhasználói módú hibakeresés során az aktuális szál általában meghatározza a regisztrációs környezetet. A hibakereső parancsokban, bővítményekben és hibakeresési információs ablakokban található regisztrációkra való hivatkozásokat a rendszer az aktuális szál regisztrációinak megfelelően értelmezi.
A regisztrációs környezetet az aktuális száltól eltérő értékre módosíthatja felhasználói módú hibakeresés közben az alábbi parancsok egyikével:
.cxr (Környezeti rekord megjelenítése)
.ecxr (Kivétel környezeti rekord megjelenítése)
A kernel módú hibakeresés során számos hibakereső parancs használatával szabályozhatja a regiszterkörnyezetet, beleértve a következő parancsokat:
.thread (Regisztrációs környezet beállítása)
.cxr (Környezeti rekord megjelenítése)
.trap (Trap Frame megjelenítése)
Ezek a parancsok nem módosítják a CPU-regisztrálók értékeit. Ehelyett a hibakereső lekéri a megadott regiszterkörnyezetet a memóriában lévő helyről. Valójában a hibakereső csak a mentett regiszterértékeket tudja lekérni. (Az egyéb értékek dinamikusan vannak beállítva, és nincsenek mentve. A mentett értékek elegendők a veremnyom követésének újbóli létrehozásához.
A regisztrációs környezet beállítása után a rendszer az új regiszterkörnyezetet használja a regiszterértékeket használó parancsokhoz, például a k (Display Stack Backtrace) és az r (Regisztrálások) parancsokhoz.
Többprocesszoros számítógépek hibakeresésekor azonban egyes parancsok lehetővé teszik a processzor megadását. (További információ az ilyen parancsokról: Többprocesszoros szintaxis.) Ha egy parancshoz processzort ad meg, a parancs az aktív szál regisztrációs környezetét használja a megadott processzoron az aktuális regisztrációs környezet helyett, még akkor is, ha a megadott processzor az aktuálisan aktív processzor.
Ha a regisztrációs környezet nem felel meg az aktuális processzormód-beállításnak, ezek a parancsok helytelen vagy értelmetlen kimenetet eredményeznek. A kimeneti hibák elkerülése érdekében a regisztrációs állapottól függő parancsok mindaddig sikertelenek lesznek, amíg a processzor módot nem módosítja a regisztrációs környezetnek megfelelően. A processzor mód módosításához használja az .effmach (Effective Machine) parancsot,
A regisztrációs környezet módosítása a helyi környezetet is megváltoztathatja. Így a regisztrációs környezet hatással lehet a helyi változók megjelenítésére.
Ha bármilyen alkalmazás végrehajtása, átlépése vagy nyomon követése történik, a regiszter környezet azonnal visszaállításra kerül, hogy megfeleljen a programszámláló pozíciójának. Felhasználói módban a regisztrációs környezet is alaphelyzetbe áll, ha az aktuális folyamat vagy szál módosul.
A regiszter környezet hatással van a veremnyomra, mert a veremnyom azon a helyen kezdődik, ahová a veremmutató regiszter (x86-alapú processzor esetében esp) mutat. Ha a regisztrációs környezet érvénytelen vagy elérhetetlen értékre van állítva, a veremkövetések nem kérhetők le.
A .apply_dbp (Adattöréspont alkalmazása a környezetbe) paranccsal processzortörési pontot (adattöréspontot) alkalmazhat egy adott regisztrációs környezetre.
Helyi környezet
Egy program végrehajtásakor a helyi változók jelentése a programszámláló helyétől függ, mivel az ilyen változók hatóköre csak a definiált függvényre terjed ki.
Ha felhasználói vagy kernel módú hibakeresést végez, a hibakereső az aktuális függvény hatókörét (a verem aktuális keretét) használja helyi környezetként. A környezet módosításához használja a .frame (Set Local Context) parancsot, vagy kattintson duplán a kívánt keretre a Hívások ablakban.
Felhasználói módú hibakeresés esetén a helyi környezet mindig egy keret az aktuális szál veremkövetésén belül. Kernel módú hibakeresés esetén a helyi környezet mindig egy keret az aktuális regiszterkörnyezet szálának veremkövetkeztetésében.
Egyszerre csak egy veremkeretet használhat a helyi kontextusban. Más keretek helyi változói nem érhetők el.
A helyi környezet alaphelyzetbe áll, ha az alábbi események valamelyike következik be:
Bármilyen program végrehajtása, léptetése vagy nyomon követése
A szálelválasztó (~) bármilyen parancsban való használata
A regisztrációs környezet bármilyen módosítása
A !for_each_frame bővítmény lehetővé teszi egyetlen parancs ismételt végrehajtását, egyszer a verem minden egyes képkockáján. Ez a parancs módosítja az egyes keretek helyi környezetét, végrehajtja a megadott parancsot, majd visszaadja a helyi környezetet az eredeti értékére.