Na identifikáciu príčin modré obrazovky(BSOD) potrebuje analyzovať výpis pamäte. V drvivej väčšine prípadov stačí minidump, ktorý systém vytvorí v prípade kritických chýb.
Tento článok obsahuje návod krok za krokom na inštaláciu a konfiguráciu WinDBG - výkonný nástroj na ladenie, ktorý vám umožní identifikovať skutočnú príčinu BSOD.

Krok 1 — Nastavenie nahrávania malého výpisu z pamäte

Krok 2 — Inštalácia WinDBG

Ak chcete analyzovať výpisy pamäte, budete musieť nainštalovať ladiaci program WinDBG, ktorý je súčasťou súpravy Windows SDK. V čase písania článku najnovšie dostupné Verzie systému Windows SDK:

  • Windows 10 SDK (stiahnite si online inštalátor)
  • Windows 8.1 SDK (stiahnite si online inštalačný program)

Krok 3 — Mapovanie súborov .dmp na WinDBG

Mapujte svoje súbory .dmp na WinDBG, aby ste uľahčili čítanie a analýzu výpisov pamäte. To vám umožní otvárať súbory výpisu z Prieskumníka priamo vo WinDBG, čím sa obíde jeho predbežné spustenie.


Krok 4 – Nastavenie servera symbolov na príjem súborov symbolov ladenia


Inštalácia a počiatočná konfigurácia WinDBG je teraz dokončená. Ak chcete zmeniť jeho vzhľad, môžete prejsť do ponuky vyhliadka- nastavenia písma nájdete po výbere položky Písmo a nastavenia okna konzoly v možnosti.

22. júna 2010

Predtým bol Windbg k dispozícii na stiahnutie samostatne. Pre najnovšie verzie ho však Microsoft ponecháva ako súčasť Windows SDK. Nižšie nájdete odkazy na stiahnutie.

Windows 10

Najnovšiu verziu Windbg pre Windows 7 si môžete stiahnuť z odkazu https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

Windows 7

Stiahnite si inštalačné programy z vyššie uvedených odkazov. Upozorňujeme, že týmto sa nestiahne celá súprava SDK, je to len inštalátor. akonáhle spustíte súbor, môžeš vyberte, ktoré nástroje chcete stiahnuť. Ak máte záujem iba o Windbg, môžete vylúčiť všetko ostatné a vybrať iba „Nástroje na ladenie“ v časti „Spoločné nástroje“

Vyššie uvedený balík nainštaluje verziu windbg 6.12. Ak chcete rýchlo nainštalovať windbg, môžete použiť staršiu verziu (6.11), ktorú si môžete stiahnuť z
link uvedený na konci tohto príspevku.

Po dokončení inštalácie nájdete program v Úvodná ponuka-> Všetky programy -> Nástroje na ladenie pre Windows -> Windbg

Nástroje na ladenie pre Windows- Nástroje na ladenie prevádzkového kódu systémy Windows. Ide o sadu voľne distribuovaných programov od spoločnosti Microsoft určených na ladenie kódu používateľského režimu a režimu jadra: aplikácie, ovládače, služby, moduly jadra. Sada nástrojov obsahuje konzolové a GUI debuggery, nástroje na prácu so symbolmi, súbormi, procesmi, nástroje na vzdialené ladenie. Sada nástrojov obsahuje nástroje, pomocou ktorých môžete nájsť príčiny porúch v rôznych komponentoch systému. Nástroje na ladenie pre Windows od určitého momentu nie sú dostupné na stiahnutie vo forme samostatnej distribúcie a sú súčasťou Windows SDK (Windows Software Development Kit). Inštrumentálna zostava Nástroje systému Windows SDK je zase k dispozícii ako súčasť programu predplatného MSDN alebo si ju možno voľne stiahnuť ako samostatnú distribúciu z msdn.microsoft.com. Podľa vývojárov najnovšie a najlepšie aktuálna verzia Nástroje na ladenie pre Windows sú obsiahnuté v súprave Windows SDK.

Nástroje na ladenie pre Windows sa aktualizujú a sprístupňujú verejnosti pomerne často a tento proces žiadnym spôsobom nezávisí od vydania. operačné systémy. Preto pravidelne kontrolujte nové verzie.

Pozrime sa teraz, na čo konkrétne slúžia nástroje na ladenie Microsoft Windows:

  • Ladenie lokálnych aplikácií, služieb (služieb), ovládačov a jadra;
  • Ladenie cez sieť vzdialené aplikácie, služby (služby), ovládače a jadro;
  • Ladenie spustených aplikácií v reálnom čase;
  • Analyzujte súbory výpisu pamäte aplikácií, jadra a systému ako celku;
  • Práca so systémami založenými na architektúrach x86/x64/Itanium;
  • Ladenie programov v užívateľskom režime a režime jadra;

Dostupné ďalšie verzie Nástroje na ladenie pre Windows: 32-bit x86, Intel Itanium, 64-bit x64. Potrebujeme dva z nich: x86 alebo x64.

Existuje niekoľko spôsobov, ako nainštalovať nástroje na ladenie pre Windows, v tomto článku zvážime iba tie hlavné:

  • Inštalácia cez webový inštalátor.
  • Inštalácia ladiacich nástrojov pre Windows z ISO Obraz systému Windows SDK.
  • Inštalácia ladiacich nástrojov pre Windows priamo z balíkov dbg_amd64.msi /dbg_x86.msi.

Zostáva nejasné, v akom bode, prečo by som mal inštalovať nástroje na ladenie do počítača? Často sa predsa stretávate so situáciou, kedy zásah do Pracovné prostredie vysoko nežiaduce! A ešte viac, pretože inštalácia nového produktu, to znamená vykonávanie zmien v registri / systémových súboroch, môže byť úplne neprijateľná. Príkladom sú kritické servery. Prečo vývojári neuvažujú o prenosných verziách aplikácií, ktoré nevyžadujú inštaláciu?
Od verzie k verzii prechádza proces inštalácie balíka Debugging Tools for Windows určitými zmenami. Poďme teraz rovno do procesu inštalácie a pozrime sa na spôsoby, akými je možné sadu nástrojov nainštalovať.

Inštalácia ladiacich nástrojov pre Windows pomocou webového inštalátora

Prejdite na stránku Windows SDK Archive a nájdite sekciu s názvom Windows 10 a pod položkou „Windows 10 SDK (10586) a Microsoft Windows 10 Mobile Device Emulator (verzia 10586.11)“.

Kliknite na položku INŠTALOVAŤ SDK. Po kliknutí stiahnite a spustite súbor sdksetup.exe, čím sa spustí proces online inštalácie Windows SDK. V počiatočnej fáze inštalátor skontroluje, či je v systéme nainštalovaný balík .NET Framework Najnovšia verzia(v tento moment je to 4,5). Ak balík chýba, ponúkne sa inštalácia a po dokončení sa stanica reštartuje. Ihneď po reštarte, vo fáze autorizácie používateľa, sa spustí proces inštalácie priamo so súpravou Windows SDK.

Často sa pri výbere všetkých komponentov balíka bez výnimky môžu počas procesu inštalácie vyskytnúť chyby. V tomto prípade sa odporúča inštalovať komponenty selektívne, minimálna požadovaná sada.

Po dokončení inštalácie nástrojov na ladenie systému Windows sa zobrazí umiestnenie ladiacich súborov túto metódu naša inštalácia bude nasledovná:

  • 64-bitové verzie: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x64
  • 32-bitové verzie: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x86

* kde x.x je špecifická verzia vývojového kitu;
Všimli sme si, že verzie 8 a vyššie sú inštalačné cesty pre každého citeľne odlišné od klasických predchádzajúce verzie nástroje na ladenie?

Obrovské plus túto metódu Inštalácia ladiacich nástrojov pre Windows znamená inštaláciu verzií ladiacich nástrojov pre všetky architektúry naraz.

Inštalácia ladiacich nástrojov pre Windows z Windows SDK ISO

Táto metóda zahŕňa inštaláciu nástrojov na ladenie pre Windows pomocou úplného inštalačného obrazu súpravy Windows SDK (Software Developers Kit). Do určitého času stiahnite iso obraz pre príslušný systém môžete navštíviť stránku Windows SDK Archive. V súčasnosti však môžete získať obraz ISO súpravy SDK spustením webového inštalátora sdksetup.exe a výberom položky Stiahnite si súpravu Windows Software Development Kit v úvodnom okne inštalačného programu:

Ako sa zistilo, predchádzajúci spôsob inštalácie pomocou webového inštalátora je dosť rozmarný a často zlyháva. Na čistých systémoch sa nainštaluje bez problémov, ale na dostatočne zaťažených systémoch vznikajú početné problémy. Ak je to váš prípad, použite túto metódu.

Podľa toho si na stránke treba vybrať požadovaný distribučný kit, pre mňa (a myslím, že aj pre mnohých) je to momentálne „Windows SDK pre Windows 7 a .NET Framework 4“ a trochu nižšie kliknúť na odkaz „Získať ISO obraz DVD" .

Pri práci so stránkou msdn.microsoft.com vám odporúčam použiť prehliadač internet Explorer, pretože boli pozorované prípady nefunkčnosti konkurenčných produktov!

Podľa toho je potrebné vyberať len podľa potreby. Bitová rýchlosť ladiacich nástrojov pre Windows je zvyčajne rovnaká ako bitová rýchlosť systému. Moje testovacie systémy sú väčšinou 64-bitové, takže vo väčšine prípadov sťahujem obraz pre 64-bitový systém GRMSDKX_EN_DVD.iso .
Potom po stiahnutí obrazu musíme nejako pracovať s existujúcim obrazom ISO. Tradičným spôsobom je, samozrejme, napaľovanie CD, ale je to dosť zdĺhavý a niekedy nákladný spôsob. Navrhujem použiť bezplatné služby na vytvorenie virtuálnych diskových zariadení v systéme. Osobne na tento účel najradšej používam program DEAMON Tools Lite. Niekto môže mať iné preferencie, priamejšie alebo ľahšie nástroje, v chuti a farbe, ako sa hovorí .. Po inštalácii DAEMON Tools Lite, len dvakrát kliknem na obrazový súbor GRMSDKX_EN_DVD.iso a v systéme mám nové virtuálne CD:

Potom dvojklikom aktivujem autoload a spustím Inštalácia systému Windows SDK:

Keď príde rad na výber komponentov, ktoré sa majú nainštalovať zo zoznamu, zakážeme úplne všetky možnosti okrem tých, ktoré sú označené na snímke obrazovky. To nám teraz pomôže vyhnúť sa zbytočným chybám.


Správne, snímka obrazovky zobrazuje dve možnosti: „Windows Performance Toolkit“ a „Debugging Tools for Windows“. Vyberte si oboje, pretože Windows Performance Toolkit sa vám pri práci určite bude hodiť! Ďalej po kliknutí na tlačidlo „Ďalej“ inštalácia pokračuje v normálnom režime. A na konci uvidíte nápis "Inštalácia dokončená".
Po dokončení inštalácie budú pracovné adresáre súpravy Debugging Tools for Windows nasledovné:

  • Pre x86 verziu:
  • Pre x64 verziu:

Tým sa dokončí inštalácia nástrojov na ladenie pre Windows.

Inštalácia ladiacich nástrojov pre Windows prostredníctvom súboru .msi

V prípade problémov pri inštalácii Debugging Tools for Windows dvoma predchádzajúcimi spôsobmi tu máme ešte jeden, najspoľahlivejší a rokmi overený, ktorý pomohol takpovediac viackrát. Kedysi, pred integráciou do Windows SDK, boli Debugging Tools for Windows dostupné ako samostatný .msi inštalátor, ktorý možno stále nájsť, no už v útrobách distribúcie Windows SDK. Keďže už máme po ruke ISO obraz Windows SDK, nemôžeme ho pripojiť do systému, ale jednoducho ho otvoriť pomocou známeho archivátora WinRAR, alebo akéhokoľvek iného produktu, ktorý pracuje s obsahom ISO diskov.

Po otvorení obrázka musíme prejsť do adresára „Setup“ umiestneného v koreňovom adresári a potom vybrať jeden z adresárov:

  • Inštalácia 64-bitovej verzie: \Setup\WinSDKDebuggingTools_amd64 a rozbaľte súbor dbg_amd64.msi z tohto adresára.
  • Inštalácia 32-bitovej verzie: \Setup\WinSDKDebuggingTools a rozbaľte súbor dbg_x86.msi z tohto adresára.

Po dokončení inštalácie budú pracovné adresáre súpravy Debugging Tools for Windows nasledovné:

  • Pre x86 verziu: C:\Program Files (x86)\Debugging Tools for Windows (x86)
  • Pre x64 verziu: C:\Program Files\Debugging Tools for Windows (x64)

V tomto bode možno inštaláciu ladiacich nástrojov pre Windows považovať za dokončenú.

Ďalšie informácie

Neviem s čím to súvisí, možno s mojou neopatrnosťou, ale po nainštalovaní Debugging Tools for Windows inštalátor nenastaví cestu k adresáru s debuggerom v premennej Path system path. To ukladá určité obmedzenia na spúšťanie rôznych úloh ladenia priamo z konzoly. Preto pri absencii cesty sám píšem do okna Premenné prostredia cesta k nástrojom na ladenie:

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

* Vo vašom prípade sa cesty môžu líšiť tak z dôvodu použitia OS s inou bitovou verziou, ako aj z dôvodu použitia SDK inej verzie.

Pomôcky balíka Debugging Tools for Windows môžu fungovať ako prenosné aplikácie, stačí ich skopírovať pracovný systém katalóg Microsoft Windows Performance Toolkit a použiť ju ako prenosnú verziu na produkčnom serveri. Nezabudnite však vziať do úvahy kapacitu systému !! Aj keď ste vykonali úplnú inštaláciu balíka na kritickom systéme, môžete začať pracovať hneď po inštalácii, nie je potrebný žiadny reštart.

Nástroje na ladenie pre Windows

A teraz, konečne, tu je zloženie ladiacich nástrojov pre Windows:

Súbor Účel
adplus.doc Dokumentácia pre pomôcku ADPlus.
adplus.exe Konzolová aplikácia, ktorá automatizuje prácu ladiaceho programu cdb na vytváranie výpisov, protokolových súborov pre jeden alebo viac procesov.
agestore.exe Pomôcka na odstránenie zastaraných súborov z úložného priestoru používaného serverom symbolov alebo zdrojovým serverom.
breakin.exe Pomôcka, ktorá umožňuje odoslať vlastnú kombináciu prestávok procesom, podobne ako pri stlačení CTRL+C.
cdb.exe Debugger konzoly používateľského režimu.
convertstore.exe Pomôcka na konverziu postáv z 2-vrstvových na 3-vrstvové.
dbengprx.exe Ripiter (proxy server) na vzdialené ladenie.
dbgpc.exe Pomôcka na zobrazenie informácií o stave RPC hovoru.
dbgsrv.exe Proces servera používaný na vzdialené ladenie.
dbh.exe Pomôcka na zobrazenie informácií o obsahu súboru symbolov.
dumpchk.exe Pomôcka na overenie výpisov. Nástroj na rýchlu kontrolu súboru výpisu.
dumpexam.exe Pomôcka na analýzu výpisu pamäte. Výsledkom je výstup do %SystemRoot%\MEMORY.TXT .
gflags.exe Editor príznakov globálneho systému. Pomôcka spravuje kľúče databázy Registry a ďalšie nastavenia.
i386kd.exe Zavinovačka pre kd. Bolo to to, čo sa kedysi nazývalo kd pre systémy založené na Windows NT/2000 pre počítače x86? Pravdepodobne odišiel z dôvodu kompatibility.
ia64kd.exe Zavinovačka pre kd. Bolo to to, čo sa kedysi nazývalo kd pre systémy založené na Windows NT/2000 pre stroje ia64? Pravdepodobne odišiel z dôvodu kompatibility.
kd.exe Debugger konzoly v režime jadra.
kdbgctrl.exe Nástroj na správu ladenia jadra. Pomôcka na správu a konfiguráciu pripojenia na ladenie jadra.
kdsrv.exe Pripojovací server pre KD. Pomôcka je malá aplikácia, ktorá beží a čaká na vzdialené pripojenia. kd beží na klientovi a pripája sa k tomuto serveru na vzdialené ladenie. Server aj klient musia pochádzať z rovnakého zostavenia nástrojov na ladenie.
kill.exe Pomôcka na ukončenie procesov.
list.exe Nástroj na zobrazenie obsahu súboru na obrazovke. Táto miniatúrna pomôcka bola pribalená s jediným účelom - prezeraním veľkých textových alebo protokolových súborov. Zaberá málo miesta v pamäti, pretože načítava text po častiach.
logger.exe Malý debugger, ktorý dokáže pracovať iba s jedným procesom. Pomôcka vloží do priestoru procesu súbor logexts.dll, ktorý zaznamená všetky volania funkcií a ďalšie akcie skúmaného programu.
logviewer.exe Pomôcka na prezeranie protokolov napísaných ladiacim programom logger.exe.
ntsd.exe Microsoft NT Symbolic Debugger (NTSD). Ladiaci nástroj, ktorý je identický s cdb, okrem toho, že pri spustení vytvorí textové okno. Rovnako ako cdb, aj ntsd je schopný ladiť konzolové aplikácie aj grafické aplikácie.
pdbcopy.exe Pomôcka na odstránenie súkromných symbolov zo súboru symbolov, ovládajúca verejné symboly zahrnuté v súbore symbolov.
remote.exe Pomôcka na vzdialené ladenie a diaľkové ovládanie akéhokoľvek ladiaceho nástroja konzoly KD, CDB a NTSD. Umožňuje vzdialene spúšťať všetky tieto ladiace programy konzoly.
rtlist.exe Vzdialený prehliadač úloh. Pomôcka sa používa na zoznam spustených procesov prostredníctvom procesu servera DbgSrv.
symchk.exe Pomôcka na stiahnutie symbolov zo servera symbolov spoločnosti Microsoft a vytvorenie lokálnej vyrovnávacej pamäte symbolov.
symstore.exe Pomôcka na vytvorenie siete resp lokálny obchod postavy (2-vrstvové/3-vrstvové). Sklad symbolov je špecializovaný adresár na disku, ktorý je zostavený podľa určitej štruktúry a obsahuje symboly. V koreňovom adresári symbolov sa vytvorí štruktúra podpriečinkov s názvami zhodnými s názvami komponentov. Každý z týchto podpriečinkov zase obsahuje vnorené podpriečinky so špeciálnymi názvami získanými hašovaním binárnych súborov. Pomôcka symstore skenuje zložky komponentov a pridáva nové komponenty do skladu symbolov, kde ich môže získať ktorýkoľvek klient. Hovorí sa, že symstore sa používa na získanie symbolov z 0-vrstvového úložiska a ich uloženie do 2-vrstvového/3-vrstvového úložiska.
tlist.exe Prehliadač úloh. Nástroj na výpis všetkých spustených procesov.
umdh.exe Pomôcka haldy výpisu v užívateľskom režime. Nástroj na analýzu hromady vybraného procesu. Umožňuje zobraziť rôzne možnosti pre haldu.
usbview.exe USB prehliadač. pomôcka na zobrazenie USB zariadenia pripojený k počítaču.
vmdemux.exe Demultiplexor virtuálny prístroj. Vytvorí viacero pomenovaných kanálov pre jedno pripojenie COM. Kanály sa používajú na ladenie rôznych komponentov virtuálneho počítača
windbg.exe Debugger v používateľskom režime a režime jadra s GUI.

Úvod do WinDBG – 1. časť

Alexander Antipov

WinDBG je skvelý debugger. Nemusí mať príliš užívateľsky prívetivé rozhranie a v predvolenom nastavení nemá čierne pozadie, ale v súčasnosti je to jeden z najvýkonnejších a najstabilnejších debuggerov v systéme Windows. V tomto článku vás prevediem základmi WinDBG, aby ste s ním mohli začať.


WinDBG je skvelý debugger. Nemusí mať príliš užívateľsky prívetivé rozhranie a v predvolenom nastavení nemá čierne pozadie, ale v súčasnosti je to jeden z najvýkonnejších a najstabilnejších debuggerov v systéme Windows. V tomto článku vás prevediem základmi WinDBG, aby ste s ním mohli začať.

Toto je prvý článok zo série o WinDBG. Zoznam všetkých článkov v tejto sérii:

  • Časť 1 - inštalácia, rozhranie, symboly, vzdialené/lokálne ladenie, systém pomoci, moduly, registre.
  • 2. časť - body zlomu.
  • 3. časť - kontrola pamäte, ladenie programu krok za krokom, tipy a triky.

V tomto článku sa pozrieme na pripojenie a pripojenie k procesu a v nasledujúcich sa budeme zaoberať bodmi prerušenia, krokovaním a kontrolou pamäte.

Inštalácia WinDBG

V porovnaní so systémom Windows 7 sa proces inštalácie pre WinDBG v systéme Windows 8 mierne zmenil. V tejto časti sa budeme zaoberať inštaláciou ladiaceho programu pre oba operačné systémy.

Inštalácia WinDBG v systéme Windows 8

V systéme Windows 8 je WinDBG súčasťou Windows Driver Kit (WDK). Môžete nainštalovať vizuálne štúdio a WDK, alebo si samostatne nainštalujte balík Debugging Tools pre Windows 8.1, ktorý obsahuje WinDBG.

Inštalátor sa vás opýta, či chcete WinDBG nainštalovať lokálne alebo stiahnuť celý vývojový balík pre iný počítač. To posledné je v podstate ekvivalent offline inštalátor, čo je veľmi praktické, ak si budete chcieť balík v budúcnosti nainštalovať na iné systémy.

Obrázok 1: Výber typu inštalácie

V ďalšom okne musíte zrušiť začiarknutie všetkých položiek okrem "Nástroje na ladenie pre Windows" a kliknúť na tlačidlo "Stiahnuť".

Keď inštalátor dokončí svoju prácu, prejdite do adresára, do ktorého bol balík stiahnutý (v predvolenom nastavení je to c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK) a prejdite inštalačným postupom.

Inštalácia WinDBG v systéme Windows 7 a starších verziách

Pre Windows 7 a staršie verzie je WinDBG súčasťou balíka "Debugging Tools for Windows", ktorý je súčasťou Windows SDK a .Net Framework. Budete musieť stiahnuť inštalačný program a potom počas procesu inštalácie vybrať "Nástroje na ladenie pre Windows".

Počas inštalácie vyberiem možnosť „Nástroje na ladenie“ v časti „Redistribuovateľné balíčky“, aby som vytvoril samostatný inštalačný program, ktorý uľahčí následné inštalácie.

Obrázok 2: Výber možností inštalácie na vytvorenie samostatného inštalátora

Po dokončení inštalácie by ste mali mať k dispozícii inštalačné programy WinDBG rôzne platformy(v c:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\).

Obrázok 3: Priečinok s inštalačnými programami WinDBG pre rôzne platformy

Rozhranie WinDBG

Obrázok 4: Vzhľad WinDBG

Keď prvýkrát uvidíte vzhľad a dojem z WinDGB, uvedomíte si, že debugger je desivo jednoduchý. Väčšina funkcií WinDBG sa učí počas ladenia procesov. Namiesto plytvania časom popisovaním rozhrania sa v nasledujúcich častiach budeme venovať len najdôležitejším bodom.

Najzákladnejšia vec, ktorú potrebujete vedieť o rozhraní debuggera, je príkazové okno, ktoré pozostáva z dvoch oblastí. Prvá oblasť: okno, kde sa zobrazuje výsledok vykonania príkazov. Druhá oblasť: malé textové pole na zadávanie príkazov.

Obrázok 5: Príkazové okno WinDBG

Symboly

Vo väčšine prípadov WinDBG nevyžaduje žiadne špeciálne nastavenia a funguje správne hneď po vybalení. Ale jedna dôležitá vec, ktorú treba doladiť, sú symboly. Symboly sú súbory, ktoré sa generujú spolu so spustiteľným súborom počas kompilácie programu a obsahujú ladiace informácie (funkcie a názvy premenných). Informácie o ladení vám umožňujú preskúmať funkčnosť aplikácie počas ladenia alebo rozoberania. Mnoho komponentov spoločnosti Microsoft je zostavených so symbolmi, ktoré sú distribuované prostredníctvom servera Microsoft Symbol Server. So zvyškom spustiteľných súborov nie je všetko také ružové - veľmi zriedkavo sú k aplikácii pribalené súbory s informáciami o ladení. Vo väčšine prípadov spoločnosti obmedzujú prístup k takýmto informáciám.

Ak chcete nakonfigurovať WinDBG na používanie servera Microsoft Symbol Server, prejdite do časti Cesta k súboru:Symbol a nastavte cestu na SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols. Samozrejme, je trochu zvláštne, že sa ako oddeľovač používajú hviezdičky. Po nastavení servera Microsoft Symbol Server sa symboly stiahnu do priečinka C:\Symbols.

Obrázok 6: Nastavenie Microsoftu Server symbolov

WinDBG v prípade potreby automaticky načíta symboly pre binárne súbory. Môžete tiež pridať svoj vlastný priečinok so symbolmi, napríklad:

SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder

Pridávanie symbolov počas ladenia

Ak potrebujete importovať symboly počas ladenia, môžete tak urobiť pomocou .sympath (príkazové okno sa objaví, keď sa zapojíte do procesu). Ak chcete napríklad pridať priečinok c:\SomeOtherSymbolFolder, zadajte nasledujúci príkaz:

0:025> .sympath+ c:\SomeOtherSymbolFolder
Cesta vyhľadávania symbolov je: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
Cesta rozšíreného vyhľadávania symbolov je: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

Po pridaní alebo zmene ciest je dobré znova načítať symboly:

0:025> .znova načítať
Opätovné načítanie aktuálnych modulov
................................................................
...............................................

Kontrola načítaných symbolov

Ak chcete zistiť, ktoré moduly majú načítané symboly, môžete použiť príkaz x*!. Hoci WinDBG načítava symboly iba podľa potreby, x*! zobrazí symboly, ktoré je možné načítať. Môžete vynútiť načítanie symbolov pomocou príkazu ld * (môže to chvíľu trvať a tento proces môžete zastaviť prechodom na Debug:Break).

Teraz môžeme vidieť symboly pre každý modul.

Obrázok 8: Zoznam symbolov

Ladenie lokálneho procesu

Pri ladení lokálneho procesu máte dve možnosti:

  1. Zapojte sa už prebiehajúci proces.
  2. Proces spustenia cez WinDBG.

Každá metóda má svoje výhody a nevýhody. Ak povedzme spustíte program cez WinDBG, potom máte k dispozícii niektoré špeciálne možnosti ladenia (napríklad ladenie haldy), ktoré môžu spôsobiť zlyhanie aplikácie. Na druhej strane existujú aj programy, ktoré sa zrútia, keď k nim pripojíte debugger. Niektoré aplikácie (najmä malvér) kontrolujú prítomnosť debuggera v systéme počas spúšťania, a preto má v tomto prípade zmysel držať sa už spusteného procesu. Niekedy dochádza k ladeniu služby systému Windows, ktoré nastavuje niektoré parametre pri spustení, takže na zjednodušenie procesu ladenia je tiež lepšie pripojiť sa k spustenému procesu a nie spustiť službu pomocou ladiaceho nástroja. Niektorí ľudia tvrdia, že spustenie procesu cez debugger má vážny vplyv na výkon. Skrátka vyskúšajte oboje a vyberte si, čo vám najviac vyhovuje. Ak z nejakého dôvodu uprednostňujete konkrétnu metódu, podeľte sa o svoje myšlienky v komentároch!

Spustenie procesu

Ak ladíte samostatnú aplikáciu, ktorá beží lokálne a nie je pripojená k sieti, možno ju budete chcieť spustiť cez WinDBG. To však neznamená, že sa nemôžete pripojiť k už spustenému procesu. Vyberte si pre vás najpohodlnejší spôsob.

Spustenie procesu nie je ťažké. Prejdite na "File: Open Executable" a vyberte spustiteľný súbor, ktorý chcete ladiť. Môžete tiež zadať argumenty alebo nastaviť štartovací adresár:

Obrázok 9: Výber spustiteľného súboru na ladenie

Procesné pripojenie

Pripojenie k už spustenému procesu tiež nie je zložité. Upozorňujeme však, že v niektorých prípadoch môže chvíľu trvať, kým nájdete presný proces, ktorý chcete ladiť. Niektoré prehliadače napríklad vytvoria jeden nadradený proces a potom niekoľko ďalších procesov pre každú kartu. Takže v závislosti od výpisu zrútenia, ktorý ladíte, možno budete chcieť pripojiť nie k rodičovskému procesu, ale k procesu spojenému s kartou.

Ak sa chcete pripojiť k už spustenému procesu, prejdite na „Súbor: Pripojiť k procesu“ a potom vyberte PID alebo názov procesu. Nezabudnite, že na zapojenie do procesu musíte mať príslušné práva.

Obrázok 10: Výber procesu na pripojenie

Ak po pripojení aplikácia pozastavila svoju prácu, začiarknutím príslušného políčka môžete použiť režim „Noninvaise“.

Ladenie vzdialeného procesu

Niekedy možno budete musieť ladiť proces na vzdialenom systéme. Bolo by oveľa pohodlnejšie zvládnuť túto úlohu pomocou lokálneho debuggera namiesto použitia virtuálneho počítača alebo RDP. Alebo možno ladíte proces LoginUI.exe, ktorý je k dispozícii iba vtedy, keď je systém uzamknutý. V situáciách, ako je táto, môžete použiť lokálnu verziu WinDBG a pripojiť sa k procesom na diaľku. Na vyriešenie týchto problémov existujú dva najbežnejšie spôsoby.

Existujúce relácie ladenia

Ak ste už začali s ladením programu lokálne (pripojením alebo spustením procesu cez WinDBG), môžete zadať špecifický príkaz a WinDBG spustí „poslucháč“ (poslucháč), ku ktorému sa môže vzdialený debugger pripojiť. Ak to chcete urobiť, použite príkaz .server:

Server tcp:port=5005

Po spustení vyššie uvedeného príkazu sa môže zobraziť varovanie, ako je toto:

Obrázok 11: Výstražné hlásenie, ktoré sa môže zobraziť po spustení príkazu na vytvorenie „poslucháča“

Potom WinDBG oznámi, že server beží:

0:005> .server tcp:port=5005
0: -vzdialený tcp:Port=5005,Server=POUŽÍVATEĽ-PC

Teraz sa môžete pripojiť zo vzdialeného hostiteľa k už existujúcej relácii ladenia tak, že prejdete na „File:Connect to a Remote Session“ a do textového poľa zadáte niečo takéto: tcp:Port=5005,Server=192.168.127.138

Obrázok 12: Vzdialené pripojenie do relácie ladenia

Po pripojení dostanete potvrdenie na vzdialenom klientovi:


server spustený. Klient sa môže spojiť s ktorýmkoľvek z týchto príkazových riadkov
0: -vzdialený tcp:Port=5005,Server=POUŽÍVATEĽ-PC
MACHINENAME\User (tcp 192.168.127.138:13334) pripojený v pondelok 16. decembra 09:03:03 2013

a správu lokálna verzia debugger:

MACHINENAME\User (tcp 192.168.127.138:13334) pripojený v pondelok 16. decembra 09:03:03 2013

Vytvorte vzdialený server

Môžete tiež vytvoriť samostatný server s WinDBG, pripojte sa k nemu na diaľku a vyberte proces na ladenie. Môžete to urobiť pomocou súboru dbgsrv.exe, v ktorom plánujete ladiť procesy. Ak chcete spustiť takýto server, spustite nasledujúci príkaz:

dbgsrv.exe -t tcp:port=5005

Obrázok 13: Spustenie vzdialeného servera

A znova sa vám môže zobraziť bezpečnostné upozornenie, ktoré by ste mali prijať:

Obrázok 14: Bezpečnostná správa, ktorá sa môže zobraziť počas spúšťania ladiaceho servera

K serveru ladenia sa môžete pripojiť, ak prejdete do súboru „Súbor: Pripojiť k vzdialenému stub“ a do textového poľa zadáte nasledujúci riadok: tcp:Port=5005,Server=192.168.127.138

Obrázok 15: Pripojenie k ladiacemu serveru

Po pripojení nebudete dostávať žiadne signály, že ste sa pripojili, ale ak prejdete na "File:Attach to a Process", uvidíte zoznam procesov ladiaceho servera (kde beží dbgsrv.exe). Teraz sa môžete zapojiť do procesu, ako keby ste to robili lokálne.

Systém pomoci

Systém pomoci vo WinDBG je skvelý. Okrem toho, že sa naučíte niečo nové, mali by ste byť schopní získať pomocné informácie o príkaze. Na prístup k pomocníkovi WinDBG použite príkaz .hh:

Môžete tiež získať pomocné informácie pre konkrétny príkaz. Ak chcete napríklad získať pomoc s príkazom .reload, použite nasledujúci príkaz:

windbg> .hh .znova načítať

Alebo jednoducho prejdite do časti „Pomocník:Obsah“.

Moduly

Počas behu programu sa importujú rôzne moduly, ktoré poskytujú funkčnosť aplikácie. Preto, ak viete, ktoré moduly aplikácia importuje, môžete lepšie pochopiť, ako funguje. V mnohých prípadoch budete ladiť konkrétny modul načítaný programom, nie samotný spustiteľný súbor.

Po pripojení k procesu WinDBG automaticky zobrazí načítané moduly. Napríklad nižšie sú moduly po pripojení k calc.exe:

Microsoft (R) Windows Debugger, verzia 6.12.0002.633 X86
Autorské práva (c) Microsoft Corporation. Všetky práva vyhradené.

*** počkajte s čakajúcou prílohou
Cesta vyhľadávania symbolov je: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
Spustiteľná vyhľadávacia cesta je:
ModLoad: 00a70000 00b30000 C:\Windows\system32\calc.exe
ModLoad: 77630000 7776c000 C:\Windows\SYSTEM32\ntdll.dll
ModLoad: 77550000 77624000 C:\Windows\system32\kernel32.dll
ModLoad: 75920000 7596a000 C:\Windows\system32\KERNELBASE.dll
ModLoad: 76410000 77059000 C:\Windows\system32\SHELL32.dll
ModLoad: 77240000 772ec000 C:\Windows\system32\msvcrt.dll
ModLoad: 76300000 76357000 C:\Windows\system32\SHLWAPI.dll
ModLoad: 75cd0000 75d1e000 C:\Windows\system32\GDI32.dll
ModLoad: 75fa0000 76069000 C:\Windows\system32\USER32.dll
ModLoad: 777b0000 777ba000 C:\Windows\system32\LPK.dll
ModLoad: 774b0000 7754d000 C:\Windows\system32\USP10.dll
ModLoad: 73110000 732a0000 C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_
6595b64144ccf1df_1.1.7600.16385_none_72fc7cbf861225ca\gdiplus.dll
ModLoad: 75a80000 75bdc000 C:\Windows\system32\ole32.dll
ModLoad: 76360000 76401000 C:\Windows\system32\RPCRT4.dll
ModLoad: 777c0000 77860000 C:\Windows\system32\ADVAPI32.dll
ModLoad: 75be0000 75bf9000 C:\Windows\SYSTEM32\sechost.dll
ModLoad: 76270000 762ff000 C:\Windows\system32\OLEAUT32.dll
ModLoad: 74590000 745d0000 C:\Windows\system32\UxTheme.dll
ModLoad: 74710000 748ae000 C:\Windows\WinSxS\x86_microsoft.windows.common-
ModLoad: 703d0000 70402000 C:\Windows\system32\WINMM.dll
ModLoad: 74c80000 74c89000 C:\Windows\system32\VERSION.dll
ModLoad: 77770000 7778f000 C:\Windows\system32\IMM32.DLL
ModLoad: 75c00000 75ccc000 C:\Windows\system32\MSCTF.dll
ModLoad: 74130000 7422b000 C:\Windows\system32\WindowsCodecs.dll
ModLoad: 74260000 74273000 C:\Windows\system32\dwmapi.dll
ModLoad: 756d0000 756dc000 C:\Windows\system32\CRYPTBASE.dll
ModLoad: 75e60000 75ee3000 C:\Windows\system32\CLBCatQ.DLL
ModLoad: 6ef10000 6ef4c000 C:\Windows\system32\oleacc.dll

Neskôr v procese ladenia môžete tento zoznam znova zobraziť pomocou príkazu lmf:

0:005>lmf
začiatok a názov modulu
00a70000 00b30000 calc C:\Windows\system32\calc.exe
6ef10000 6ef4c000 oleacc C:\Windows\system32\oleacc.dll
703d0000 70402000 WINMM C:\Windows\system32\WINMM.dll
73110000 732a0000 gdiplus C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_
1.1.7600.16385_none_72fc7cbf861225ca\gdiplus.dll
74130000 7422b000 WindowsCodecs C:\Windows\system32\WindowsCodecs.dll
74260000 74273000 dwmapi C:\Windows\system32\dwmapi.dll
74590000 745d0000 UxTheme C:\Windows\system32\UxTheme.dll
74710000 748ae000 COMCTL32 C:\Windows\WinSxS\x86_microsoft.windows.common-
controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc\COMCTL32.dll
74c80000 74c89000 VERZIA C:\Windows\system32\VERSION.dll
756d0000 756dc000 CRYPTBASE C:\Windows\system32\CRYPTBASE.dll
75920000 7596a000 KERNELBASE C:\Windows\system32\KERNELBASE.dll
75a80000 75bdc000 ole32 C:\Windows\system32\ole32.dll
75be0000 75bf9000 sechost C:\Windows\SYSTEM32\sechost.dll
75c00000 75ccc000 MSCTF C:\Windows\system32\MSCTF.dll
75cd0000 75d1e000 GDI32 C:\Windows\system32\GDI32.dll
75e60000 75ee3000 CLBCatQ C:\Windows\system32\CLBCatQ.DLL
75fa0000 76069000 USER32 C:\Windows\system32\USER32.dll
76270000 762ff000 OLEAUT32 C:\Windows\system32\OLEAUT32.dll
76300000 76357000 SHLWAPI C:\Windows\system32\SHLWAPI.dll
76360000 76401000 RPCRT4 C:\Windows\system32\RPCRT4.dll
76410000 77059000 SHELL32 C:\Windows\system32\SHELL32.dll
77240000 772ec000 msvcrt C:\Windows\system32\msvcrt.dll
774b0000 7754d000 USP10 C:\Windows\system32\USP10.dll
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll
77630000 7776c000 ntdll C:\Windows\SYSTEM32\ntdll.dll
77770000 7778f000 IMM32 C:\Windows\system32\IMM32.DLL
777b0000 777ba000LPK C:\Windows\system32\LPK.dll
777c0000 77860000 ADVAPI32 C:\Windows\system32\ADVAPI32.dll

Adresu sťahovania konkrétneho modulu môžete zistiť aj pomocou príkazu "lmf m":

0:005> lmf m kernel32
začiatok a názov modulu
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll

Informácie o hlavičke obrázka konkrétneho modulu môžete získať aj pomocou rozšírenia !dh ( Výkričník označuje príponu):

0:005> !dh kernel32

Typ súboru:DLL
HODNOTY HLAVIČKY SÚBORU
14C stroj (i386)
4 počet sekcií
4A5BDAAD časová dátumová pečiatka Po 13. júl 21:09:01 2009

0 ukazovateľ súboru na tabuľku symbolov
0 počet symbolov
Veľkosť E0 voliteľnej hlavičky
2102 charakteristiky
Spustiteľný súbor
32-bitový slovný stroj
DLL

VOLITEĽNÉ HODNOTY HLAVIČKY
10B magic#
Verzia linkera 9.00
Kód veľkosti C4600
Veľkosť inicializovaných údajov C800
0 veľkosť neinicializovaných údajov
510C5 adresa vstupného bodu
1000 základný kód
----- Nový -----
77550000 obrazová základňa
Zarovnanie 1000 sekcií
200 zarovnanie súborov
3 podsystém (Windows CUI)
Verzia operačného systému 6.01
Verzia obrázka 6.01
Verzia podsystému 6.01
Obrázok veľkosti D4000
Veľkosť hlavičiek 800
Kontrolný súčet D5597
00040000 veľkosť rezervy zásobníka
00001000 veľkosť potvrdenia zásobníka
00100000 veľkosť haldovej rezervy
00001000 veľkosť potvrdenia haldy
140 vlastností DLL
dynamická základňa
Kompatibilné s NX
B4DA8 [A915] adresa exportného adresára
BF6C0 [ 1F4] adresa importného adresára
C7000 [ 520] adresa adresára zdrojov
0 [ 0] adresa adresára výnimiek
0 [ 0] adresa bezpečnostného adresára
C8000 [B098] adresa adresára premiestnenia základne
C5460 [ 38] adresa adresára ladenia
0 [ 0] adresa popisného adresára
0 [ 0] adresa špeciálneho adresára
0 [ 0] adresa adresára ukladania vlákien
816B8 [ 40] adresa Load Configuration Directory
278 [ 408] adresa adresára viazaného importu
1000 [DE8] adresa importného adresára tabuľky adries
0 [ 0] adresa adresára oneskoreného importu
0 [ 0] adresa adresára hlavičiek COR20
0 [ 0] adresa rezervovaného adresára

HLAVA SEKCIE #1
.textový názov
Virtuálna veľkosť C44C1
1000 virtuálnych adries
Veľkosť nespracovaných údajov C4600
800 ukazovateľ súboru na nespracované údaje

0 počet premiestnení
0 počet čísel riadkov
60000020 vlajok
kód
(nie je určené zarovnanie)
Spustiť Čítanie

Ladiť adresáre(2)
Typ Veľkosť Ukazovateľ adresy
cv 25 c549c c4c9c Formát: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

HLAVA SEKCIE #2
.názov údajov
Virtuálna veľkosť FEC
Virtuálna adresa C6000
E00 veľkosť nespracovaných údajov
Ukazovateľ súboru C4E00 na nespracované údaje
0 ukazovateľ súboru na tabuľku premiestnenia
0 ukazovateľ súboru na čísla riadkov
0 počet premiestnení
0 počet čísel riadkov
C0000040 vlajky
inicializované údaje
(nie je určené zarovnanie)
Čítaj píš

HLAVA SEKCIE #3
Názov .rsrc
virtuálna veľkosť 520
Virtuálna adresa C7000
600 veľkosť nespracovaných údajov
Ukazovateľ súboru C5C00 na nespracované údaje
0 ukazovateľ súboru na tabuľku premiestnenia
0 ukazovateľ súboru na čísla riadkov
0 počet premiestnení
0 počet čísel riadkov
40000040 vlajok
inicializované údaje
(nie je určené zarovnanie)
Iba na čítanie

HLAVA Č. 4
.relocname
virtuálna veľkosť B098
Virtuálna adresa C8000
Veľkosť nespracovaných údajov B200
Ukazovateľ súboru C6200 na nespracované údaje
0 ukazovateľ súboru na tabuľku premiestnenia
0 ukazovateľ súboru na čísla riadkov
0 počet premiestnení
0 počet čísel riadkov
42000040 vlajok
inicializované údaje
Vyraditeľné
(nie je určené zarovnanie)
Iba na čítanie

Správy a výnimky

Po pripojení k procesu sa najskôr zobrazí zoznam modulov a potom sa môžu objaviť ďalšie správy. Napríklad, keď sa zapojíme do calc.exe, WinDBG automaticky nastaví bod prerušenia (čo je len značka používaná na zastavenie aplikácie). Na obrazovke sa zobrazia informácie o bode zlomu:

(da8.b44): Výnimka prerušenia inštrukcie - kód 80000003 (prvá šanca)

Táto konkrétna správa je výnimkou, konkrétne výnimkou prvej šance. Výnimka je v podstate špeciálna podmienka, ktorá sa vyskytuje počas vykonávania programu. Výnimka prvej šance znamená, že program sa zastavil ihneď po výskyte výnimky. Výnimka druhej šance znamená, že po výskyte výnimky sa vykonajú niektoré operácie a potom program zastaví svoju prácu.

Registre

Po zobrazení správ a výnimiek ladiaci program zobrazí stav registrov procesora. Registre sú špeciálne premenné v procesore, ktoré ukladajú malé časti informácií alebo sledujú stav niečoho v pamäti. Procesor dokáže spracovať informácie v týchto registroch veľmi rýchlo. Je to oveľa rýchlejšie ako získavanie informácií na zbernici z RAM zakaždým.

Po pripojení k calc.exe WinDBG automaticky zobrazí informácie o nasledujúcich registroch:

eax=7ffd9000 ebx=00000000 ecx=00000000 edx=776cd23d esi=00000000 edi=00000000
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246

Neskôr môžete tieto informácie znova duplikovať pomocou príkazu r:

0:005>r
eax=7ffd9000 ebx=00000000 ecx=00000000 edx=776cd23d esi=00000000 edi=00000000
eip=77663540 esp=02affd9c ebp=02affdc8 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!DbgBreakPoint:
77663540 ccm int 3

Ak chceme získať hodnotu konkrétneho registra, môžeme vykonať nasledujúci príkaz:

0:005> r eax
eax=7ffd9000

Informácie možno získať súčasne z niekoľkých registrov takto:

0:005> r eax, ebp
eax=7ffd9000 ebp=02affdc8

Ukazovateľ na pokyn

Posledný príkaz je o spustení inštrukcií. Tu sa tiež zobrazuje informácia, ako v prípade príkazu r, čo obsahuje register EIP. EIP je register obsahujúci umiestnenie ďalší pokyn ktoré má vykonať procesor. To, čo zobrazí WinDBG, je ekvivalentom príkazu u eip L1, po ktorom WinDBG prejde na adresu zadanú v registri EIP, skonvertuje túto časť na kód zostavy a zobrazí ju na obrazovke.

ntdll!DbgBreakPoint:
77663540 ccm int 3

zostať v kontakte

V nasledujúcich článkoch sa pozrieme na to, ako používať WinDBG v boji: body prerušenia, krokové ladenie a prezeranie pamäte. Neprepínajte sa! J.