Windows 7 kernel hibakeresési mód futásidejű. Hogyan működik a hibakereső

A kernel hibakereséséhez nullmodemkábellel vagy modemkapcsolattal kell csatlakoznia a számítógéphez. A hibakeresést végző számítógép neve „Host”, a problémás számítógép pedig „Cél” lesz.

Mindkét számítógépen ugyanazt a Windows verziót kell futtatni, és a célszámítógép szimbólumfájljait telepíteni kell a gazdagépen. A szimbólumfájlok a Windows telepítő CD-jén találhatók a Support\Debug könyvtárban.

A hibakeresés engedélyezéséhez módosítania kell a BOOT.INI fájlt a célszámítógépen.

1. Módosítsa a BOOT.INI fájl attribútumait:

attrib c:\boot.ini –r –s

2. Szerkessze ezt a fájlt a sorba Windows indítás adja hozzá a /debug paramétert (a rendszer indítására RAM kernel hibakereső Windows rendszerindítás). További paraméterek a /Debugport, amely megmondja a rendszernek, hogy melyik COM port kell használni (alapértelmezés szerint COM2) és /Baudrate - az adatátviteli sebesség megadásához (az alapértelmezett 19200 baud, de jobb a 9600). Például:


multi(0)disk(0)rdisk(0)partition(0)\WINDOWS="Windows NT" /debug /debugport=com2 /baudrate=9600

3. Mentse el a fájlt.

4. Állítsa be a BOOT.INI fájl korábbi attribútumait:

attrib c:\boot.ini +r +s

Ebben a példában a célszámítógép 9600 bps-os kapcsolatot engedélyezett a COM2-n.

A gazdagépet a hibakereséshez szükséges beállításokkal kell konfigurálni. Ezenkívül telepíteni kell a szimbólumfájlokat. Telepítésükhöz lépjen a telepítő CD \support\debug könyvtárába, és írja be a következő parancsot:

expndsym : <целевой диск и каталог>

Például:

expndsym f: d:\symbols

A telepítés eltarthat egy ideig. Ne feledje, hogy ha szervizcsomagok telepítve vannak a célszámítógépen, akkor a csomagok szimbólumfájljait a gazdagépen is telepíteni kell. A frissítési csomagokhoz tartozó szimbólumfájlok letölthetők a Microsoft webhelyéről.

A következő lépés a hibakereséshez szükséges környezeti változók beállítása, például a szimbólumfájlok helyét jelző változók stb. Az alábbiakban ezeket a változókat ismertetjük.

A rendszerváltozók leírása

Ezeknek a változóknak a definíciója elhelyezhető batch file annak érdekében, hogy elkerüljük a megfelelő parancsok beírását minden rendszerindításkor:

visszhang ki
set_nt_debug_port=com2
set_nt_debug_baud_rate=9600
állítsa be a következőt: _nt_symbol_path=d:\symbols\i386
set _nt_log_file_open=d:\debug\logs\debug.log

Most át kell másolnia a kernel hibakereső szoftverét, amely a support\debug\ könyvtárban található<процессор>a telepítő CD-n (support\debug\I386). A legegyszerűbb módja a teljes könyvtár másolása, mivel az kicsi (kb. 2,5 MB). Az I386 platformhoz egy hibakeresőt használnak, amely I386KD.EXE fájlként kerül forgalomba. A hibakereső az I386KD paranccsal indul el. Parancs beírásához nyomja meg a billentyűkombinációt és várja meg, amíg megjelenik a felszólítás parancs sor kd>.

A kernel módú hibakeresők a CPU és az operációs rendszer között helyezkednek el. Ez azt jelenti, hogy amikor leállítja a kernel módú hibakeresőt, az operációs rendszer is teljesen leáll. Nem nehéz elképzelni, hogy az átmenet operációs rendszer a kemény megállás hasznos, ha időzítőkkel és időzítési problémákkal dolgozik. Azonban egy hibakereső kivételével, amelyről az alábbiakban lesz szó (e fejezet "SoftlCE Debugger" című részében), nem lehet a felhasználói módú kódot hibakeresni kernel módú hibakeresők segítségével.

Nem sok kernel módú hibakereső létezik. Íme néhány közülük: Windows 80386 Debugger (WDEB386), Kernel Debugger (1386KD), WinDBG és SoftlCE. A következő szakaszok röviden ismertetik ezeket a hibakeresőket.

Hibakereső WDBEB386

A WDEB386 egy Windows 98 kernelmódú hibakereső, amelyet a Platform SDK részeként terjesztenek. Ez a hibakereső csak a virtuális illesztőprogramokat író fejlesztők számára hasznos. Windows eszközök 98 (VxD). A legtöbb kernelmódú hibakeresőhöz hasonlóan a Windows operációs rendszerekhez, a WDEB386 hibakereső működéséhez két gép és egy null modemkábel szükséges. Két gépre van szükség, mert a debuggernek a célgépen futó része rendelkezik korlátozott hozzáférés a hardverére, így az elküldi a kimenetét és fogadja a parancsokat a másik géptől.

A WDEB386 hibakereső rendelkezik érdekes történet. A Microsoft belső háttéreszközeként indult a Windows 3.0 korszakában. Nehéz volt használni, és nem volt elég támogatása a hibakereséshez forráskódés más szép tulajdonságok, amelyeket a Visual C++ hibakeresők és Visual Basic.

A "Dot" (DOT) parancsok a legtöbbek fontos jellemzője WDEB386. Az INT 41 megszakítással a WDEB386 kibővíthető parancsok hozzáadásával. Ez a bővíthetőség lehetővé teszi a VxD illesztőprogram-készítők számára, hogy egyéni hibakereső parancsokat hozzanak létre, amelyek egyszerű hozzáférést biztosítanak számukra a virtuális eszközeik információihoz. Hibakeresés Windows verzió A 98 számos DOT-parancsot támogat, amelyek lehetővé teszik az operációs rendszer pontos állapotának megfigyelését a hibakeresési folyamat bármely pontján.

Hibakereső I386KD

A Windows 2000 abban különbözik a Windows 98-tól, hogy a kernelmódú hibakereső tényleges működő része az NTOSKRNL rész. EXE - a fő operációs rendszermag fájlja Windows rendszerek 2000. Ez a hibakereső ingyenes (kiadás) és tesztelt (debug) operációs rendszer konfigurációkban is elérhető. A kernel módú hibakeresés engedélyezéséhez állítsa a /DEBUG rendszerbetöltő beállítást BOOT értékre. INI és ezen felül a /DEBUGPORT rendszerbetöltő beállítás, ha a kernel mód hibakereső kommunikációs portját az alapértelmezetttől (COM1) eltérő értékre kell beállítani. Az I386KD a saját gépén fut és kommunikál vele Windows gép 2000 null modem kábelen keresztül.

Kernel módú hibakereső NTOSKRNL. Az EXE csak annyit tesz, hogy vezérli a CPU-t, hogy az operációs rendszer hibakereshető legyen. A legtöbb hibakeresési munka - szimbólumfeldolgozás, kiterjesztett töréspontok és szétszerelés - az 1386KD oldalon történik. Egy Windows idő Az NT 4 Device Driver Kit (DDK) dokumentálta a nullmodemkábelben használt protokollt. A Microsoft azonban már nem dokumentálja.

Az 1386KD ereje nyilvánvaló, ha megnézzük az összes parancsot, amelyet a Windows 2000 belső állapotának eléréséhez kínál. Ha ismeri az eszközillesztő-programok működését a Windows 2000 rendszerben, a programozó számos parancs kimenetét felügyeli. Minden ereje ellenére az i386KD-t szinte soha nem használják, mert egy konzolalkalmazás, amelyet nagyon fárasztó használni az alapszintű hibakereséshez.

Hogyan lehet elindítani a kernel hibakeresőt?

Mester válasza:

A szoftverfejlesztési folyamatnak van egy nagyon fontos összetevője - a hibakeresés. Felé alkalmazási programok felhasználói módban futó eszközök hajtják végre, és gyakran be vannak építve az IDE-be. Ahhoz, hogy hibakeresést végezhessen, például illesztőprogramokat, futtassa a kernel hibakeresőt.

El kell indítani a cmd parancsfeldolgozót. Nyissa meg a Start menüt a tálcán. A megjelenő ablakban kattintson a „Futtatás…” elemre. Megjelenik a „Program futtatása” ablak. A szövegmezőbe írja be a cmd parancsot, majd kattintson az OK gombra.

Most hozzon létre biztonsági másolat boot.ini fájl. Először megtudja az áram telepítési útvonalát a Windows másolatai, a következő paranccsal: echo %SystemRoot%

Ezután lépjen a telepített operációs rendszerrel rendelkező lemezre az eszköz betűinek beírásával, majd egy kettősponttal. A cd paranccsal lépjen a gyökérkönyvtárba. Most az attrib paranccsal távolítsa el a „rejtett”, „csak olvasható” és „rendszer” attribútumot a boot.ini fájlból. Használja a copy parancsot biztonsági másolat létrehozásához, majd állítsa be az attribútumokat a helyére.

A rendszerindítási beállítások aktuális listájának megjelenítéséhez használja a bootcfg /query parancsot. Nézze meg a listát, és határozza meg azt az elemet, amely alapján új beállítások jönnek létre kernel módban történő hibakeresés lehetőségével. A rendszerindítási bejegyzés azonosítóját meg kell jegyezni.

A bootcfg/copy paranccsal hozzon létre rendszerindító bejegyzést. A másolni kívánt rekord azonosítójának megadásához használja az /id paramétert. A /d kapcsolóval adja meg a megjelenítendő bejegyzés nevét. Most a bootcfg /query paranccsal vissza kell térnie a rendszerindítási beállítások listájához, és meg kell néznie a hozzáadott bejegyzés azonosítóját.

Most engedélyeznie kell a kernel hibakereső elindításának lehetőségeit a korábban létrehozott fájlban rendszerindítási bejegyzés. Ha hibakeresést fog végezni a célgépen, csak hozzá kell adnia a /debug opciót.

Ha távoli hibakeresést szeretne végrehajtani úgy, hogy a célszámítógépet egy kommunikációs porton keresztül csatlakoztatja a gazdagéphez, akkor használja a /port és /baud opciókat a portszám és az adatátviteli sebesség megadásához.

Ha a távoli hibakeresést FireWire kábelen (IEEE 1394 interfész) keresztül kívánja végrehajtani, akkor a /dbg1394 kapcsolóval engedélyezze a megfelelő módot, és a /ch kapcsolóval adja meg a csatorna számát.

A változtatások végrehajtásának ellenőrzéséhez ellenőrizze a rendszerindító fájlokat a bootcfg paranccsal a /query paraméterrel. Az exit parancs végrehajtása után zárja be a shell ablakot.

Ha szükséges, módosítsa az operációs rendszer rendszerindítási beállításait. Nyissa meg a Vezérlőpultot a Start menüből, és nyissa meg a Rendszer elemet. A megnyíló „Rendszer tulajdonságai” ablakban válassza a „Speciális” lapot. Ezen a lapon válassza ki a „Boot and Recovery” részt, és kattintson az „Opciók” gombra. A megjelenő „Boot and Recovery” ablakban aktiválnia kell az „Operációs rendszerek listájának megjelenítése” opciót. Zárja be mindkét párbeszédpanelt az "OK" gombbal.

Indítsa újra a számítógépet. Válassza ki a rendszerindítást hibakeresővel. Jelentkezzen be, és kezdjen el dolgozni a célgépen, vagy kezdje el távolról a hibakeresést. Használjon olyan eszközöket, mint a WinDbg és a KD.

Bevezetés

1. A Windows hibakeresők típusai

2. Felhasználói mód hibakeresők

3. Kernel módú hibakeresők

3.1 WDEB386 hibakereső

3.2 Hibakereső I386KD

3.3 Win DBG Debugger

3.4 SoftICE hibakereső

4. Általános hibakeresési probléma

5. Automatikus indítás alkalmazások a hibakeresőben

5.1 Gyorsbillentyűk megszakítása

Következtetés

Irodalom

Bevezetés

A szoftvereszközök működésének megtanulása a hibakeresési folyamat legnehezebb része. Csak az eszközök képességeinek és korlátainak megértésével hozhat többet ki belőlük, és kevesebb időt tölthet a hibakereséssel. Általában a hibakeresők rendkívül hasznosak, de meglehetősen finom problémákhoz vezethetnek, amelyek zsákutcába vezetik a programozót. Ez a fejezet bemutatja, mi a hibakereső, és hogyan működnek a különféle hibakeresők Win32 operációs rendszereken (a Microsoft 32 bites Windows operációs rendszerei).

Ugyanakkor általánosságban a hibakeresők azon speciális tulajdonságaira fogunk összpontosítani, amelyek akkor kapcsolódnak be, amikor valamilyen szoftverfolyamat fut az utóbbi irányítása alatt. Azt is elmagyarázza, hogyan javíthatja a 32 bites Windows operációs rendszerek bizonyos funkcióit a hibakeresés megkönnyítése érdekében. Két saját fejlesztésű hibakereső kerül bemutatásra, amelyek forráskódja a mellékelt CD-n található. Az első (MinDBG) elegendő képességgel rendelkezik ahhoz, hogy hibakeresőnek nevezzük. A második (WDBG) egy példa hibakereső Microsoft Windows, amely szinte mindent megtesz, amit egy valódi rendszerhibakereső, beleértve a szimbólumtáblázatok manipulálását, a töréspontok kezelését, a disassembler kód generálását és a grafikus felhasználói felülettel (GUI) való koordinációt. A WDBG megbeszélésekor megmutatjuk, hogyan működnek a töréspontok, és megvitatjuk, hogy mik azok. különféle fájlokat szimbólumok (szimbólumfájlok).

Mielőtt rátérnénk a fejezet fő anyagára, határozzunk meg két általános kifejezést, amelyeket gyakran használunk ebben a könyvben: fő (vagy alap) hibakereső (debugger) és alárendelt hibakereső (debuggee). Egyszerűen fogalmazva, a fő hibakereső egy olyan folyamat, amely egy másik folyamatot vezérelhet, a szolga hibakereső pedig egy olyan folyamat, amely a fő hibakereső alatt fut. Egyes operációs rendszereken a fő hibakeresőt szülőfolyamatnak, a szolga hibakeresőt pedig gyermekfolyamatnak nevezik.

Debugger (hibakereső, angol hibakereső a bugból) - számítógépes program, amelynek célja, hogy megtalálja a hibákat más programokban, operációs rendszermagokban, SQL-lekérdezésekben és más típusú kódokban. A hibakereső lehetővé teszi a változóértékek nyomon követését, figyelését, beállítását vagy módosítását kódfutás közben, töréspontok vagy leállási feltételek beállítását és eltávolítását stb.

A legtöbb fejlesztő jobban ismeri a felhasználói módú hibakeresőket. Nem meglepő, hogy ennek a módnak a hibakeresőit a felhasználói módú alkalmazások hibakeresésére tervezték. A felhasználói módú hibakereső kiváló példája a hibakereső Microsoft Visual C++. A kernel módú hibakeresők, ahogy a nevük is sugallja, olyan hibakeresők, amelyek lehetővé teszik az operációs rendszer kernelének hibakeresését. Elsősorban azok használják őket, akik eszközillesztőket írnak (és persze hibakeresést is végeznek).

2. Felhasználói mód hibakeresők

A felhasználói módú hibakeresők minden felhasználói módban futó alkalmazás hibakeresésére szolgálnak, beleértve a grafikus felhasználói felületeket, valamint az olyan szokatlan alkalmazásokat, mint a Windows 2000 szolgáltatások. Az ilyen típusú hibakeresők általában támogatják GUI felhasználó (GUI1). Az ilyen hibakeresők fő jellemzője, hogy a Win32 debug alkalmazás programozási felületét (debug API) használják. Mivel az operációs rendszer a szolga hibakeresőt „különleges módban futóként” jelöli meg, az IsDebuggerPresent API függvény segítségével megtudhatja, hogy a folyamat hibakereső alatt fut-e.

A Win32 hibakereső API biztosításakor van egy hallgatólagos konvenció: ha egy folyamat a hibakereső API alatt fut (és ezáltal szolgafolyamattá teszi), a fő hibakereső nem tud leválni a folyamatról. Ez a szimbiotikus kapcsolat azt jelenti, hogy ha a fő hibakereső kilép, a szolga hibakereső is kilép. A fő hibakereső csak a szolga hibakereső és az általa létrehozott folyamatok hibakeresésére korlátozódik (ha a fő hibakereső támogatja a gyermek folyamatokat).

GUI – Grafikus felhasználói felület. - Per.

A virtuálisgép-megközelítést használó értelmezett nyelvek és futásidejű rendszerek számára maguk is teljes hibakereső környezetet biztosítanak. virtuális gépek, és nem használják a Win32 hibakereső API-t. Néhány példa az ilyen típusú környezetekre a Microsoft vagy a Sun Java virtuális gépei (JVM), a Microsoft webalkalmazásainak parancsfájl-környezete és a Microsoft Visual Basic p-kód értelmezője.

hibakereső kernel operációs rendszer

A Visual Basic hibakeresésével a 7. fejezetben fogunk foglalkozni, de ügyeljen arra, hogy a Visual Basic p-kód felülete nincs dokumentálva. Nem fogunk belemenni a Java és a szkriptek hibakereső felületeibe, ezek a témák túlmutatnak ennek a könyvnek a hatókörén. A Microsoft JVM hibakeresésével és profilozásával kapcsolatos további információkért lásd: Java alkalmazások hibakeresése és profilozása MSDN-en. Az ilyen interfészek készlete nagyon gazdag és változatos, és lehetővé teszi a JVM működésének teljes vezérlését. A parancsfájl-hibakereső írásával kapcsolatos információkért tekintse meg az MSDN „Active Script Debugging API objektumok” című témakörét. A JVM-hez hasonlóan a szkript-hibakereső objektumok is gazdag felületet biztosítanak a szkripteléréshez és a dokumentációhoz.

Meglepően sok program használja a Win32 hibakereső API-t. Ezek közé tartozik: a Visual C++ hibakereső, amelyről az 5. és a 6. fejezet részletesen szól; a Windows hibakereső (WinDBG), amelyet a következő részben tárgyalunk (a kernel módú hibakeresőről); BoundsChecker program a Compuware NuMega-tól; Platform SDK HeapWalker program; Platform SDK Depends program; Borland Delphi és C++ Builder hibakeresők, valamint az NT Symbolic Debugger (NTSD). Biztos vagyok benne, hogy még sokan vannak.

3. Kernel módú hibakeresők

A kernel módú hibakeresők a CPU és az operációs rendszer között helyezkednek el. Ez azt jelenti, hogy amikor leállítja a kernel módú hibakeresőt, az operációs rendszer is teljesen leáll. Könnyen belátható, hogy az operációs rendszer kemény megállítása hasznos, ha időzítőkkel és időzítési problémákkal dolgozik. Egy hibakereső kivételével azonban, amelyről az alábbiakban lesz szó (a fejezet „SoftlCE Debugger” című részében), nem lehet a felhasználói módú kódot hibakeresni kernel módú hibakeresők segítségével.

Nem sok kernel módú hibakereső létezik. Íme néhány közülük: Windows 80386 Debugger (WDEB386), Kernel Debugger (1386KD), WinDBG és SoftlCE. A következő szakaszok röviden ismertetik ezeket a hibakeresőket.

3.1 WDEB386 hibakereső

A WDEB386 egy Windows 98 kernelmódú hibakereső, amelyet a Platform SDK részeként terjesztenek. Ez a hibakereső csak a Windows 98 virtuális eszközillesztőket (VxD) író fejlesztők számára hasznos. A legtöbb kernelmódú hibakeresőhöz hasonlóan a Windows operációs rendszerekhez, a WDEB386 hibakereső működéséhez két gép és egy null modemkábel szükséges. Két gépre van szükség, mert a hibakereső azon része, amely a célgépen fut, korlátozottan fér hozzá a hardveréhez, így a kimenetét elküldi a másik gépnek, és parancsokat fogad tőle.

A WDEB386 hibakeresőnek érdekes története van. A Microsoft belső háttéreszközeként indult a Windows 3.0 korszakában. Nehéz volt használni, és hiányzott belőle a forráskód-hibakereső és egyéb jó funkciók támogatása, amelyekkel a Visual C++ és a Visual Basic hibakeresők kényeztettek minket.

A pont (DOT) parancsok a WDEB386 legfontosabb jellemzői. Az INT 41 megszakítással a WDEB386 kibővíthető parancsok hozzáadásával. Ez a bővíthetőség lehetővé teszi a VxD illesztőprogram-készítők számára, hogy egyéni hibakereső parancsokat hozzanak létre, amelyek egyszerű hozzáférést biztosítanak számukra a virtuális eszközeik információihoz. A Windows 98 hibakeresési verziója számos DOT-parancsot támogat, amelyek lehetővé teszik az operációs rendszer pontos állapotának megfigyelését a hibakeresési folyamat bármely pontján.

3.2 Hibakereső I386KD

A Windows 2000 abban különbözik a Windows 98-tól, hogy a kernelmódú hibakereső tényleges működő része az NTOSKRNL rész. EXE - a Windows 2000 operációs rendszer fő kernelének fájlja Ez a hibakereső ingyenes (kiadás) és tesztelt (debug) operációs rendszer konfigurációkban is elérhető. A kernel módú hibakeresés engedélyezéséhez állítsa a /DEBUG rendszerbetöltő beállítást BOOT értékre. INI és ezen felül a /DEBUGPORT rendszerbetöltő beállítás, ha a kernel mód hibakereső kommunikációs portját az alapértelmezetttől (COM1) eltérő értékre kell beállítani. Az I386KD a saját gépén fut, és null modem kábelen keresztül kommunikál a Windows 2000 géppel.

Kernel módú hibakereső NTOSKRNL. Az EXE csak annyit tesz, hogy vezérli a CPU-t, hogy az operációs rendszer hibakereshető legyen. A legtöbb hibakeresési munka – szimbólumfeldolgozás, kiterjesztett töréspontok és szétszerelés – az 1386KD oldalon történik. Egy időben a Windows NT 4 Device Driver Kit (DDK) dokumentálta a null modemkábelben használt protokollt. A Microsoft azonban már nem dokumentálja.

Az 1386KD ereje nyilvánvaló, ha megnézi az összes parancsot, amelyet a Windows 2000 belső állapotának eléréséhez kínál. Ha ismeri az eszközillesztőprogramok működését a Windows 2000 rendszerben, a programozó számos parancs kimenetét felügyeli. Minden ereje ellenére az i386KD-t szinte soha nem használják, mert egy konzolalkalmazás, amelyet nagyon fárasztó használni az alapszintű hibakereséshez.

3.3 Win DBG Debugger

A WinDBG egy hibakereső, amely a Platform SDK részeként érkezik. Letöltheti a #"897008.files/image001.gif"> címről is

1. ábra A GFLAGS program kimenete. alkalmazás

Lista 4-1. Példa a Windows 2000 kupac megsemmisítésére

void main (void)

HANDLE hHeap = HeapCreate (0, 128, 0);

// Memória lefoglalása egy 10 bájtos blokkhoz.

LPVOID pMem = HeapAlloc(hHeap, 0,10);

// 12 bájt írása egy 10 bájtos blokkba (halom túlcsordulás).

memset (pMem, OxAC,

// Terjeszteni új blokk 20 bájt méretű.

LPVOID pMem2 = HeapAlloc(hHeap, 0, 20);

// Írjon 1 bájtot a második blokkba.

char * pUnder = (char *) ((DWORD) pMem2 - 1);

// Szabadítsa fel az első blokkot. Ez a fellebbezés a HeapFree-nek lesz

// töréspontot vált ki a hibakeresési kupac kódjában

// operációs rendszer.

HeapFree(hHeap, 0, pMem);

// Szabadítsa fel a második blokkot. Vegye figyelembe, hogy ez a hívás nem fog

// hibaüzeneteket ad ki

HeapFree(hHeap, 0, pMem2);

// Szabadítsa fel a dummy blokkot. Vegye figyelembe, hogy ez a hívás nem fog

// hibaüzeneteket ad ki

Ha bejelöli ugyanazokat a négyzeteket, mint a 4.1. ábrán, és megismétli a HEAPER végrehajtását. EXE, a következő, részletesebb kimenetet kapja:

PAGEHEAP: a 0x490 folyamat létrehozta a 00430000 hibakeresési kupacot

(jelzők 0xl, 50, 25, 0, 0): 0x490 folyamat létrehozva hibakeresési kupacot 00CF0000

(Oxl, 50, 25, 0, - 0 jelzők): 0x490 folyamat létrehozta a 01600000 hibakeresési kupacot

(Oxl, 50, 25, 0, 0 jelzők): Farokkitöltés sérülés észlelve: 0x01606FF0méretnél 0x0000000Asize 0x00000010at Ox01606FFA: Hivatkozási kísérlet, amely nincs lefoglalva

A lista tartalmát a Globális zászlók panelen beállított jelzők nevei magyarázzák.

A GFLAGS program megvitatása. EXE, szeretnék rámutatni egy nagyon hasznos lehetőségre - a Loader Snaps megjelenítése. Ha bejelöli ezt a jelölőnégyzetet, és elindítja az alkalmazást, megjelenik az alkalmazás pillanatképe, amely megmutatja, hogy a Windows 2000 hova tölti be a DLL fájlokat, és hogyan kezdi meg az importálás megszervezését. Ha látni kell, hogy pontosan mit csinál Windows rendszerbetöltő 2000 egy alkalmazás betöltésekor (főleg, ha hibát észlelnek benne), akkor ennek az opciónak az engedélyezése nagyon hasznos lépés lehet. A rendszerbetöltő pillanatképekkel kapcsolatos további információkért lásd Matt Pietrek "Under the Hood" rovatát a Microsoft Systems Journal 1999. szeptemberi számában.

5. Alkalmazások automatikus indítása a hibakeresőben

A legnehezebben hibakereshető alkalmazások azok, amelyeket egy másik folyamat indít el. Ezt a kategóriát támadják Windows szolgáltatások 2000 és folyamaton kívüli COM szerverek (COM out-of-process szerverek). Ha egy hibakeresőt egy folyamathoz szeretne csatolni, sok esetben használhatja a DebugBreak API függvényt. Két esetben azonban ez a funkció nem működik. Először is, néha nem működik a Windows 2000 szolgáltatásokkal. Ha egy szolgáltatás indításakor hibakeresést kell végrehajtani, a DebugBreak meghívása csatolja a hibakeresőt, de a hibakereső elindulásakor a szolgáltatás lejárt, és a Windows 2000 leáll. azt. Másodszor, a DebugBreak nem fog működni, ha egy folyamaton kívüli COM-kiszolgálót kell hibakeresnie. Ha meghívja a DebugBreak-et, a COM-hibakezelő elkapja a töréspont kivételét, és leállítja a COM-kiszolgálót. Szerencsére a Windows 2000 lehetővé teszi annak megadását, hogy az alkalmazás elinduljon a hibakeresőben. Ez a tulajdonság lehetővé teszi a hibakeresés megkezdését az első utasítástól kezdve. Mielőtt azonban engedélyezi ezt a tulajdonságot egy Windows 2000 szolgáltatáshoz, győződjön meg arról, hogy a szolgáltatás úgy van beállítva, hogy kommunikáljon a dolgozóval. Windows asztal 2000.

A Futtatás hibakeresővel tulajdonság kétféleképpen engedélyezhető. A legegyszerűbb a GFLAGS segédprogram futtatása. EXE, és válassza ki a rádiógombot KépFájl Lehetőségek(lásd 4.1. ábra). A szerkeszthető mezőbe való beírás után I mágusFájlNév program bináris fájlnév jelölőnégyzetet Hibakereső csoportban Kép HibakeresőLehetőségek) és írja be a jelölőnégyzet melletti szerkeszthető mezőbe teljes útvonal a hibakeresőhöz.

Egy bonyolultabb módszer: manuálisan kell beállítani a szükséges paramétereket a megfelelő registry szakaszokban (a RegEdit szerkesztő segítségével). Under_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NTX Current Version\Image Tile Execution Options

hozzon létre egy alkulcsot, amelynek neve megegyezik az alkalmazás fájlnevével. Például, ha az alkalmazás neve FOO. EXE, akkor a beállításjegyzék alkulcsának neve is FOO. ALKALMAZÁS. Ebben az alkulcsban hozzon létre egy új, Debugger nevű karakterlánc-paramétert. A Karakterlánc-paraméter szerkesztése párbeszédpanelen írja be a kiválasztott hibakereső teljes fájlnevét (beleértve a könyvtár elérési útját is). Ha megadta a GFLAGS-t. EXE, és állítson be néhány globális beállítást, akkor észre fogja venni a GiobaiFiag karakterlánc-értéket az alkalmazáskulcsban.

Most, amikor elindítja az alkalmazást, a hibakereső automatikusan betöltődik és elindul. A hibakereső parancssori beállításai a Debugger string paraméterben is megadhatók (a hibakereső program neve után). Például a WinDBG hibakereső használatához és a hibakeresés automatikus elindításához, amint a WinDBG elindul, meg kell adnia a d értéket: \platform sdk\bin\windbg a Debugger karakterlánc paraméterének módosítására szolgáló párbeszédpanelen. exe-g.

5.1 Gyorsbillentyűk megszakítása

Néha gyorsan be kell ugrani a hibakeresőbe. Ha konzolalkalmazásokat keres, akkor billentyűleütéseket +vagy +speciális kivételt fog dobni (DBG_CONTROL_C). Ez a kivétel közvetlenül a hibakeresőhöz visz, és lehetővé teszi a hibakeresés megkezdését.

Mind a Windows 2000, mind a Windows NT 4 hasznos funkciója, hogy bármikor át lehet váltani a hibakeresőre, a grafikus felhasználói felület alkalmazásaiban is. Ha a hibakereső alatt fut, nyomja meg a gombot eredményeket (alapértelmezés szerint) a DebugBreak függvény meghívásakor. A billentyű kezelésének érdekessége, hogy még ha gyorsítóként használja, vagy más módon kezeli a billentyű üzeneteit, akkor is csatlakozik a hibakeresőhöz.

Windows NT 4 rendszeren gyorsbillentyű megszakítja alapértelmezés szerint hozzá van rendelve, de a Windows 2000 rendszerben meghatározhatja, hogy melyik kulcsot használja erre a célra. Miért a registry részben

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug

Állítsa be a userDebuggerHotKey paramétert a kulcskódra (VK_*). Például a kulcs használatához A hibakeresőhöz való csatlakozáshoz a UserDebuggerHotKey értékét 0x91-re kell állítani. A módosítások a számítógép újraindítása után lépnek életbe.

Következtetés

Megnéztük a hibakeresés alapvető jellemzőit, típusait és típusait, a hibakeresés általános kérdéskörét, valamint a hibákat és azok észlelésének módját.

A meglévő hibakeresők fontos szerepet játszanak a szoftverfejlesztésben a keresés során logikai hibák, amely eszközök széles skáláját kínálja, beleértve a forráskód támogatását, az alkalmazások végrehajtásának nyomon követését, a dinamikus memóriamódosítást stb. stb.


Irodalom

1.. aspx?.aspx?id=553022>

2. https://ru. wikipedia.org/wiki/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA

http://bourabai. kz/alg/debug4. htm

4. Kostyukhin K. - VALÓS IDEJŰ RENDSZEREK HIBAKERESÉSE. Felülvizsgálat

  • Szerzői:

    Barinov S.S., Sevcsenko O.G.

  • Év:
  • Forrás:

    Informatika és számítástechnika / Diákok, végzős hallgatók és fiatal tudósok VI nemzetközi tudományos és műszaki konferenciájának anyagai - 2010. november 23-25., Donyeck, DonNTU. - 2010. - 448 p.

annotáció

A hibakereső felhasználói mód és a kernel mód összehasonlító elemzése a Microsoft Windows operációs rendszerrel kapcsolatban, kiemelve az utóbbi hibakeresésének megszervezésének különbségeit és problémáit. A kapott eredmények alapján megfogalmazásra kerülnek a kernel módú hibakeresők felépítésének alapvető követelményei vészhelyzet esetén és interaktív hibakeresés esetén. Elemzés elvégezve meglévő megoldásokat követelményeknek való megfelelés érdekében. Különösen, Speciális figyelem a Microsoft Windows Debugger-nek szentelt.

Fő rész

A hibakeresés a hibák okainak azonosításának és megszüntetésének folyamata szoftver. Egyes projektekben a hibakeresés a teljes fejlesztési idő akár 50%-át is igénybe veszi. A hibakeresés nagymértékben leegyszerűsíthető speciális eszközök használatával, amelyeket folyamatosan fejlesztenek. A fő ilyen eszköz egy hibakereső, amely lehetővé teszi a szoftver végrehajtásának vezérlését, előrehaladásának figyelését és beavatkozását. A kernel hibakereső eszközeit elsősorban az illesztőprogram-fejlesztők használják.

Az alkalmazásszoftver-fejlesztő eszközök a lehetőségek széles skáláját kínálják a programozónak. Bármely integrált fejlesztői környezet magában foglalja a hibakeresés lehetőségét használat nélkül harmadik féltől származó segédprogramok. Ha elsősorban rendszerszoftver- és illesztőprogram-fejlesztésről beszélünk, akkor annak sajátosságaiból adódóan a fejlesztési folyamat rendkívül nehéz és kevéssé automatizált. Minden fejlesztési fázis, beleértve a hibakeresést is, különálló. Mindegyik végrehajtásához speciális feltételek szükségesek: a programkód írása teljes körűen történik számítógépes rendszer, hibakeresés - hibakereső rendszeren, tesztelés - a körülményektől függően stb. Maga a kernel módú hibakereső nehezebben tanulható meg, és ennek megfelelően kevésbé barátságos.

Általánosságban elmondható, hogy a kernel hibakereső eszközök hiányáról beszélhetünk. Bár léteznek ilyen eszközök, alternatívákról gyakran nem esik szó. Például a Microsoft Windows Debugger nagyon magas belépési küszöbértékkel rendelkezik. Sok programozó beszél az első negatív tapasztalatról, amikor találkozik vele, és a legtöbb képessége kihasználatlan marad.

A virtuális címtér szerkezete alapján, ha egy alkalmazás olyan hibát követ el, amely miatt az alkalmazás egy tetszőleges memóriahelyre ír adatokat, az alkalmazás csak a saját memóriáját károsítja, más alkalmazások működését és az operációs rendszert nem befolyásolja. . mivel programkód A kernel mód képes károsítani az operációs rendszer fontos adatstruktúráit, ami elkerülhetetlenül általános meghibásodáshoz vezet. A nem megfelelően megírt illesztőprogram a teljes operációs rendszer súlyos leromlását is okozhatja.

    A modern hibakeresők a következő alapvető funkciókat kínálják:
  • hibakeresés a forráskód szintjén;
  • végrehajtás menedzsment;
  • memória megtekintése és megváltoztatása;
  • processzor regiszterek tartalmának megtekintése és módosítása;
  • a hívásverem megtekintése.

A szétszedett kóddal való munka megkönnyítése érdekében az ún. hibakeresési szimbólumok. A linker futása közben a futtatható fájl képe mellett olyan adatfájl is készíthető, amely a program végrehajtásához nem szükséges, de a hibakeresés során rendkívül hasznos információkat tartalmaz: függvények nevei, globális változók, leírások. szerkezetek. A hibakeresési szimbólumok minden Windows operációs rendszer végrehajtható fájljához elérhetők.

A végrehajtás-vezérlés a programkód végrehajtásának megszakítására és folytatására utal, ha a programkódban meghatározott parancsot ér el. Ha a programkódot lépésről lépésre hajtják végre, akkor minden programozási nyelvi tokennél vagy egy szubrutinból való kilépéskor megszakítás történik. A szabad végrehajtás során a végrehajtás megszakad a kód előre meghatározott szakaszaiban - azokon a helyeken, ahol töréspontok vannak beállítva.

A kernel mód kódjának megszakításakor a következő dilemma merül fel. A hibakereső felhasználói felületet használ a programozóval való interakcióhoz. Azok. a hibakeresőnek legalább a látható része felhasználói módban fut, és természetesen egy alkalmazásprogramozási felületet (Windows API) használ felépítéséhez, amely viszont kernel módú modulokra támaszkodik. Így a kernel mód kódjának szüneteltetése holtpontot eredményezhet: a rendszer nem válaszol a felhasználói kérésekre.

A kernelmemória eléréséhez a hibakereső egyes részeinek is kernel módban kell futniuk. Ez egyszerre két problémához vezet, amelyek nyilvánvaló következményei annak, hogy a processzor védett üzemmódjában rendezi a memóriát.

Az első probléma a virtuális memóriacímek fordításával kapcsolatos. Az illesztőprogramok a memóriájukhoz férve folyamatosan interakcióba lépnek a felhasználói módú alkalmazásokkal. A Windows operációs rendszer a virtuális címeket fizikai címekre fordítja a szálkontextus fogalma alapján. A szálkontextus egy olyan struktúra, amely egy szál állapotát tükrözi, és különösen regiszterkészletet és néhány egyéb információt tartalmaz. Amikor a vezérlést egy másik szálra adják át, kontextusváltás történik, amely elmenti az egyik szálra vonatkozó információkat, és visszaállítja a másik szálra vonatkozó információkat. Amikor egy szál kontextusát egy másik folyamat szálára váltják, a virtuális címek fizikai címekké fordítására használt oldalkönyvtár is átvált.

A sajátosság az, hogy a rendszerhívások küldésekor a Windows operációs rendszer nem váltja át a környezetet. Ez lehetővé teszi, hogy a kernel módú kód felhasználói módú virtuális címeket használjon.

Más a helyzet a megszakítások elküldésekor vagy a rendszerszálak futtatásakor. Megszakítás bármikor előfordulhat, így nem lehet megjósolni, hogy melyik szálkörnyezet kerül felhasználásra. A rendszerszálak egyetlen folyamathoz sem tartoznak, és nem tudják lefordítani a felhasználói módú virtuális címeket. Ebből következik, hogy ezekben a helyzetekben a felhasználói módú memória nem érhető el.

A második probléma az áthelyezhető memória elérése. A memóriában lévő információk nagy része áthelyezhető, és áthelyezhető fizikai memória tovább HDD egy oldalfájlhoz. Ha olyan oldalt ér el, amely nem található a fizikai memóriában, a processzor általában egy oldalhiba-megszakítást generál, amelyet a memóriakezelő kezel, aminek eredményeként az oldal beolvasásra kerül az oldalfájlból, és betöltődik a fizikai memóriába.

A leírt viselkedés megszakad, ha a hibakereső kódot használni kényszerítik magas szint megszakítási kérési szintek (IRQL). Ha az IRQL megegyezik vagy meghaladja a memóriakezelő IRQL-jét, az utóbbi nem tudja betölteni a hiányzó oldalt, mert az operációs rendszer blokkolja a Page Fault megszakítást. Ez az operációs rendszer összeomlását okozza.

A hibakeresést általában interaktívra és vészhelyzetre osztják. Az interaktív helyi hibakeresés során a hibakereső ugyanazon a rendszeren fut, mint a hibakereső. Az interaktív távoli hibakeresés során a hibakereső és a hibakereső objektum különböző rendszereken fut. A kernelkód hibakeresésénél a rendszert a rendszerindítás első szakaszától kezdve kell vezérelni, amikor a hálózat még nem működik, ezért a rendszerek közötti kommunikációhoz egyszerű soros interfészek, mint COM, FireWire, USB szolgálnak. Az utóbbi időben a szoftvervirtualizáció különböző absztrakciós szintjein tapasztalható fejlődési irányzatainak köszönhetően egyre gyakrabban használnak virtuális gépeket. A vendég operációs rendszer hibakereső operációs rendszerként működik, a hosztolt operációs rendszer tartalmaz egy hibakereső felhasználói felületet.

Ezért a vészhelyzeti hibakereséshez nem szükséges a hibakereső eszközt telepíteni a tesztszámítógépre. A Windows operációs rendszer disztribúciója vészhelyzeti hibakeresés megvalósítására szolgáló mechanizmusokat tartalmaz. Újraindítás előtt az operációs rendszer információkat menthet el az állapotáról, amelyet a fejlesztő elemezhet és kiderítheti az okot. Az ilyen fájlba mentett információkat memóriakiírásnak nevezzük.

Az alapvető kernel módú hibakereső eszközöket maga a Windows operációs rendszer gyártója biztosítja az ingyenes Debugging Tools csomag részeként. a Windows számára" Az eszközök közé tartozik a grafikus és konzol hibakeresők WinDbg és KD (a továbbiakban: Windows Debugger). Ezeknek a hibakeresőknek a munkája az operációs rendszer fejlesztői által biztosított és a rendszermagba ágyazott mechanizmusokon alapul.

A Windows Debugger fő módja a parancsértelmező mód. A moduláris felépítésnek köszönhetően, a fejlesztők által biztosítottakkal együtt Windows parancsok A Debugger támogatja a harmadik féltől származó bővítményeknek nevezett modulokat. Valójában a legtöbb beépített parancs is kiterjesztésként van csomagolva.

A Windows Debugger a távoli interaktív és vészhelyzeti hibakeresésre összpontosít, amely használat közben felfedi minden képességét. Ugyanakkor a teljes helyi interaktív hibakeresés nem támogatott: a hibakereső csak néhány kernelszerkezet megtekintését teszi lehetővé.

A Windows Debuggerhez létezik egy LiveKD nevű bővítőmodul, amelyet Mark Russinovich készített, és amely bizonyos értelemben helyi interaktív hibakeresést valósít meg. A LiveKD menet közben memóriakiíratást hoz létre működő rendszerés hibakeresésre használja.

A Debugging Tools for Windows csomag rendszeresen frissül, és támogatja az összes modern Windows operációs rendszert.

A SoftICE kernel hibakeresője, amelyet a Compuware készített a DriverStudio szoftvercsomagban, hagyományosan a Debugging Tools for Windows csomag alternatívája. A SoftICE megkülönböztető jellemzője az volt, hogy helyi interaktív hibakeresést valósított meg egy támogatott eszközön hardver. A hibakereső szinte teljesen kontrollálni tudta az operációs rendszer működését.

2006. április 3-tól a DriverStudio termékcsalád értékesítése „számos műszaki és üzleti probléma, valamint az általános piaci viszonyok miatt” leállt. Legújabb verzió Az operációs rendszer, amelyhez támogatást valósítottak meg, a Windows XP Service Pack 2. A szervizcsomagok általában nem változtatják meg az operációs rendszer alkalmazási felületét, de a rendszerhívószámok és egyéb, nem dokumentált információk módosulhatnak. A SoftICE hibakereső a belső adatstruktúrák kemény kódolt címeire támaszkodott. Ennek eredményeként a kompatibilitás megszakadt a Service Pack 3 kiadásával. Nyilvánvalóan a Windows operációs rendszer újabb verziói sem támogatottak.

A Syser Kernel Debuggert egy kis kínai Sysersoft cég hozta létre a SoftICE debugger helyettesítésére. Az első végleges verzió 2007-ben jelent meg. A SoftICE-hez hasonlóan a Syser Kernel Debugger is képes interaktív hibakeresésre futó rendszereken. Csak a 32 bites kiadások támogatottak modern változatai Ablakok.

Tovább Ebben a pillanatban A Windows Debugger egy alapvető eszköz a kernelmodul-fejlesztők körében. A Windows operációs rendszer kernelcsapata is használja.



Betöltés...
Top