Úvod do WinDBG – část 1

Alexandr Antipov

WinDBG je skvělý debugger. Nemusí mít příliš uživatelsky přívětivé rozhraní a ve výchozím nastavení nemá černé pozadí, ale v současnosti je to jeden z nejvýkonnějších a nejstabilnějších debuggerů ve Windows. V tomto článku vás provedu základy WinDBG, abyste s ním mohli začít.


WinDBG je skvělý debugger. Nemusí mít příliš uživatelsky přívětivé rozhraní a ve výchozím nastavení nemá černé pozadí, ale v současnosti je to jeden z nejvýkonnějších a nejstabilnějších debuggerů ve Windows. V tomto článku vás provedu základy WinDBG, abyste s ním mohli začít.

Toto je první článek ze série o WinDBG. Seznam všech článků obsažených v této sérii:

  • Část 1 - instalace, rozhraní, symboly, vzdálené/lokální ladění, systém nápovědy, moduly, registry.
  • Část 2 - body přerušení.
  • Část 3 - kontrola paměti, ladění programu krok za krokem, tipy a triky.

V tomto článku se podíváme na připojení a připojení k procesu a v následujících pokryjeme body přerušení, krokování a kontrolu paměti.

Instalace WinDBG

V porovnání s procesem Windows 7 Instalace WinDBG ve Windows 8 doznala drobných změn. V této části se podíváme na instalaci debuggeru pro oba operační systémy.

Instalace WinDBG na Windows 8

Ve Windows 8 je WinDBG součástí Windows Driver Kit (WDK). Můžete nainstalovat vizuální studio a WDK, nebo si samostatně nainstalujte balíček Debugging Tools pro Windows 8.1, který obsahuje WinDBG.

Instalační program se zeptá, zda chcete nainstalovat WinDBG lokálně nebo stáhnout celý vývojový balíček pro jiný počítač. Poslední jmenovaný je v podstatě ekvivalentem samostatného instalátoru, což je velmi užitečné, pokud budete chtít balíček v budoucnu nainstalovat na jiné systémy.

Obrázek 1: Výběr typu instalace

V dalším okně je třeba zrušit zaškrtnutí všech položek kromě "Debugging Tools for Windows" a kliknout na tlačítko "Stáhnout".

Jakmile instalační program dokončí svou práci, přejděte do adresáře, kam byl balíček stažen (ve výchozím nastavení je to c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK) a projděte instalační procedurou.

Instalace WinDBG na Windows 7 a starší

Pro Windows 7 a starší je WinDBG součástí balíčku "Debugging Tools for Windows", který je součástí Windows SDK a .Net Framework. Budete požádáni, abyste si stáhli instalační program a poté během procesu instalace zvolili „Nástroje pro ladění systému Windows“.

Během instalace vyberu možnost "Nástroje pro ladění" v části "Redistribuovatelné balíčky" pro vytvoření samostatného instalátoru pro usnadnění následných instalací.

Obrázek 2: Výběr možností instalace pro vytvoření samostatného instalačního programu

Po dokončení instalace byste měli mít instalační programy WinDBG pro různé platformy (v adresáři c:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\).

Obrázek 3: Složka s instalačními programy WinDBG pro různé platformy

Rozhraní WinDBG

Obrázek 4: Vzhled WinDBG

Jakmile poprvé uvidíte vzhled WinDGB, uvědomíte si, že debugger je děsivě jednoduchý. Většina funkcí WinDBG se učí během ladění procesu. Namísto ztrácení času popisováním rozhraní se v následujících částech budeme věnovat pouze nejdůležitějším bodům.

Nejzákladnější věcí, kterou potřebujete vědět o rozhraní ladicího programu, je příkazové okno, které se skládá ze dvou oblastí. První oblast: okno, kde se zobrazuje výsledek provádění příkazů. Druhá oblast: malé textové pole pro zadávání příkazů.

Obrázek 5: Příkazové okno WinDBG

Symboly

Ve většině případů WinDBG nevyžaduje žádná speciální nastavení a funguje správně hned po vybalení. Ale jeden důležitá věc, které je třeba nakonfigurovat, jsou znaky . Symboly jsou soubory, které se generují spolu se spustitelným souborem během kompilace programu a obsahují ladicí informace (funkce a názvy proměnných). Informace o ladění vám umožňují prozkoumat funkčnost aplikace při ladění nebo rozebírání. Mnoho součástí společnosti Microsoft je zkompilováno se symboly, které jsou distribuovány prostřednictvím serveru Microsoft Symbol Server. Se zbytkem spustitelných souborů není vše tak růžové - velmi zřídka jsou k aplikaci přibaleny soubory s ladicími informacemi. Ve většině případů společnosti omezují přístup k takovým informacím.

Chcete-li nakonfigurovat WinDBG pro použití Microsoft Symbol Server, přejděte do části File:Symbol File Path a nastavte cestu na SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols. Samozřejmě je trochu zvláštní, že se jako oddělovač používají hvězdičky. Po nastavení serveru Microsoft Symbol Server budou symboly staženy do složky C:\Symbols.

Obrázek 6: Nastavení serveru Microsoft Symbol Server

WinDBG v případě potřeby automaticky načte symboly pro binární soubory. Můžete také přidat svou vlastní složku se symboly, například:

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

Přidávání symbolů během ladění

Pokud potřebujete importovat symboly během ladění, můžete tak učinit pomocí .sympath (příkazové okno se objeví, když se zapojíte do procesu). Chcete-li například přidat složku c:\SomeOtherSymbolFolder, zadejte následující příkaz:

0:025> .sympath+ c:\SomeOtherSymbolFolder
Cesta hledání symbolu je: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
Cesta pro hledání rozšířeného symbolu je: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

Po přidání nebo změně cest je dobré znovu načíst symboly:

0:025> .znovu načíst
Znovu načtení aktuálních modulů
................................................................
...............................................

Kontrola načtených symbolů

Chcete-li zjistit, které moduly mají načtené symboly, můžete použít příkaz x*!. Přestože WinDBG načítá symboly pouze podle potřeby, x*! zobrazí symboly, které lze načíst. Načtení symbolů můžete vynutit pomocí příkazu ld * (to může chvíli trvat a tento proces můžete zastavit přechodem na Debug:Break).

Nyní můžeme vidět symboly pro každý modul.

Obrázek 8: Seznam symbolů

Ladění místního procesu

Při ladění místního procesu máte dvě možnosti:

  1. Připojit k již běžícímu procesu.
  2. Proces spuštění přes WinDBG.

Každá metoda má své výhody a nevýhody. Pokud, řekněme, spustíte program přes WinDBG, pak máte k dispozici některé speciální možnosti ladění (například ladění haldy), které mohou způsobit pád aplikace. Na druhou stranu existují i ​​programy, které padnou, když k nim připojíte debugger. Některé aplikace (zejména malware) kontrolují přítomnost debuggeru v systému během spouštění, a proto má v tomto případě smysl lpět na již běžícím procesu. Někdy dochází k ladění služby Windows, která nastavuje některé parametry při spuštění, takže pro zjednodušení procesu ladění je také lepší připojit se k běžícímu procesu, než spouštět službu pomocí ladicího programu. Někteří lidé tvrdí, že spuštění procesu přes debugger má vážný dopad na výkon. Zkrátka vyzkoušejte obojí a vyberte si to, co vám nejvíce vyhovuje. Pokud z nějakého důvodu preferujete konkrétní metodu, podělte se o své myšlenky v komentářích!

Spuštění procesu

Pokud ladíte samostatnou aplikaci, která běží lokálně a není připojena k síti, možná ji budete chtít spustit prostřednictvím WinDBG. To však neznamená, že se nemůžete připojit k již běžícímu procesu. Vyberte si pro vás nejpohodlnější způsob.

Spuštění procesu není obtížné. Přejděte na "File: Open Executable" a vyberte spustitelný soubor, který chcete ladit. Můžete také zadat argumenty nebo nastavit počáteční adresář:

Obrázek 9: Výběr spustitelného souboru pro ladění

Procesní spojení

Připojení k již běžícímu procesu také není obtížné. Upozorňujeme však, že v některých případech může nalezení přesného procesu, který chcete ladit, chvíli trvat. Některé prohlížeče například vytvoří jeden nadřazený proces a poté několik dalších procesů pro každou kartu. Takže v závislosti na výpisu zhroucení, který ladíte, možná budete chtít připojit nikoli k nadřazenému procesu, ale k procesu spojenému s kartou.

Chcete-li se připojit k již běžícímu procesu, přejděte na "File:Attach to a Process" a poté vyberte PID nebo název procesu. Pamatujte, že pro zapojení do procesu musíte mít příslušná práva.

Obrázek 10: Výběr procesu, ke kterému se chcete připojit

Pokud po připojení aplikace pozastavila svou práci, můžete zaškrtnutím příslušného políčka použít režim „Noninvaise“.

Ladění vzdáleného procesu

Někdy možná budete muset ladit proces na vzdáleném systému. Bylo by mnohem pohodlnější tento problém vyřešit pomocí místního debuggeru místo používání virtuální stroj nebo RDP. Nebo možná ladíte proces LoginUI.exe, který je k dispozici pouze v případě, že je systém uzamčen. V situacích, jako je tato, můžete použít místní verzi WinDBG a připojit se k procesům vzdáleně. K vyřešení těchto problémů existují dvě nejběžnější metody.

Stávající relace ladění

Pokud jste již zahájili ladění programu lokálně (připojením nebo spuštěním procesu přes WinDBG), můžete zadat konkrétní příkaz a WinDBG spustí „posluchač“ (listener), ke kterému se vzdálený debugger může připojit. Chcete-li to provést, použijte příkaz .server:

Server tcp:port=5005

Po spuštění výše uvedeného příkazu se může zobrazit varování, jako je toto:

Obrázek 11: Varovná zpráva, která se může objevit po spuštění příkazu k vytvoření „posluchadla“

Poté WinDBG oznámí, že server běží:

0:005> .server tcp:port=5005
0: -vzdálený tcp:Port=5005,Server=USER-PC

Nyní se můžete připojit ze vzdáleného hostitele k již existující relaci ladění tak, že přejdete na „File:Connect to a Remote Session“ a do textového pole zadáte něco takového: tcp:Port=5005,Server=192.168.127.138

Obrázek 12: Vzdálené připojení do relace ladění

Po připojení obdržíte potvrzení na vzdáleném klientovi:


server spuštěn. Klient se může připojit k libovolnému z těchto příkazových řádků
0: -vzdálený tcp:Port=5005,Server=USER-PC
MACHINENAME\User (tcp 192.168.127.138:13334) připojeno v pondělí 16. prosince 09:03:03 2013

a zprávu místní verze debugger:

MACHINENAME\User (tcp 192.168.127.138:13334) připojeno v pondělí 16. prosince 09:03:03 2013

Vytvořte vzdálený server

Můžete také vytvořit samostatný server s WinDBG, připojte se k němu vzdáleně a vyberte proces k ladění. To lze provést pomocí souboru dbgsrv.exe, kde plánujete ladit procesy. Chcete-li spustit takový server, spusťte následující příkaz:

dbgsrv.exe -t tcp:port=5005

Obrázek 13: Spuštění vzdáleného serveru

A znovu můžete obdržet bezpečnostní varování, které byste měli přijmout:

Obrázek 14: Bezpečnostní zpráva, která se může objevit během spouštění ladicího serveru

K ladicímu serveru se můžete připojit, pokud přejdete do souboru "File: Connect to Remote Stub" a do textového pole zadáte následující řádek: tcp:Port=5005,Server=192.168.127.138

Obrázek 15: Připojení k ladicímu serveru

Po připojení neobdržíte žádné signály, že jste se připojili, ale pokud přejdete na "File:Attach to a Process", uvidíte seznam procesů ladícího serveru (kde běží dbgsrv.exe). Nyní se můžete zapojit do procesu, jako byste to dělali lokálně.

Systém nápovědy

Systém nápovědy ve WinDBG je skvělý. Kromě toho, že se něco nového naučíte, měli byste umět i přijímat informace o pozadí o jakémkoli týmu. Pro přístup k nápovědě WinDBG použijte příkaz .hh:

Můžete také získat informace nápovědy pro konkrétní příkaz. Chcete-li například získat nápovědu k příkazu .reload, použijte následující příkaz:

windbg> .hh .znovu načíst

Nebo stačí přejít do sekce „Nápověda:Obsah“.

Moduly

Během běhu programu jsou importovány různé moduly, které zajišťují funkčnost aplikace. Pokud tedy víte, které moduly aplikace importuje, můžete lépe pochopit, jak funguje. V mnoha případech budete ladit konkrétní modul načtený programem, nikoli samotný spustitelný soubor.

Po připojení k procesu WinDBG automaticky zobrazí načtené moduly. Například níže jsou moduly po připojení k calc.exe:

Microsoft (R) Windows Debugger verze 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. Všechna práva vyhrazena.

*** počkejte s čekajícím připojením
Cesta hledání symbolu je: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
Spustitelná vyhledávací 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

Později v procesu ladění můžete tento seznam znovu zobrazit pomocí příkazu lmf:

0:005>lmf
začátek a konec názvu 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 VERZE 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 ke stažení pro konkrétní modul můžete také zjistit pomocí příkazu "lmf m":

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

Informace o záhlaví obrázku konkrétního modulu můžete také získat pomocí rozšíření !dh ( Vykřičník označuje příponu):

0:005> !dh kernel32

Typ souboru:DLL
HODNOTY HLAVIČKY SOUBORU
Stroj 14C (i386)
4 počet sekcí
4A5BDAAD časové razítko datum po 13. července 21:09:01 2009

0 souborový ukazatel na tabulku symbolů
0 počet symbolů
Velikost E0 volitelné hlavičky
2102 charakteristik
Spustitelný
32bitový textový stroj
DLL

VOLITELNÉ HODNOTY ZÁPISU
10B magické #
Verze linkeru 9.00
Kód velikosti C4600
Velikost inicializovaných dat C800
0 velikost neinicializovaných dat
510C5 adresa vstupního bodu
1000 základní kód
----- Nový -----
77550000 imagebase
Zarovnání 1000 sekcí
200 zarovnání souborů
3 subsystém (Windows CUI)
Verze operačního systému 6.01
Verze obrázku 6.01
Verze subsystému 6.01
Obrázek velikosti D4000
800 velikost záhlaví
Kontrolní součet D5597
00040000 velikost rezervy zásobníku
00001000 velikost zásobníku potvrzení
00100000 velikost haldové rezervy
00001000 velikost potvrzení haldy
140 DLL charakteristik
dynamická základna
NX kompatibilní
B4DA8 [A915] adresa exportního adresáře
BF6C0 [ 1F4] adresa importního adresáře
C7000 [ 520] adresa adresáře zdrojů
0 [ 0] adresa adresáře výjimek
0 [ 0] adresa adresáře zabezpečení
C8000 [B098] adresa adresáře přemístění báze
C5460 [ 38] adresa adresáře ladění
0 [ 0] adresa popisného adresáře
0 [ 0] adresa zvláštního adresáře
0 [ 0] adresa adresáře úložiště vláken
816B8 [ 40] adresa Load Configuration Directory
278 [ 408] adresa vázaného importního adresáře
1000 [DE8] adresa importního adresáře tabulky adres
0 [ 0] adresa adresáře Delay Import Directory
0 [ 0] adresa adresáře záhlaví COR20
0 [ 0] adresa vyhrazeného adresáře

ZÁhlaví SEKCE #1
.textový název
Virtuální velikost C44C1
1000 virtuálních adres
Velikost nezpracovaných dat C4600
800 souborový ukazatel na nezpracovaná data

0 počet přemístění
0 počet čísel řádků
60000020 vlajek
Kód
(není určeno zarovnání)
Provést čtení

Adresáře ladění (2)
Zadejte Velikost Ukazatel adresy
cv 25 c549c c4c9c Formát: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

ZÁhlaví SEKCE #2
.název dat
Virtuální velikost FEC
Virtuální adresa C6000
E00 velikost nezpracovaných dat
Ukazatel souboru C4E00 na nezpracovaná data
0 ukazatel souboru na tabulku přemístění
0 souborový ukazatel na čísla řádků
0 počet přemístění
0 počet čísel řádků
C0000040 příznaky
inicializovaná data
(není určeno zarovnání)
Číst psát

ZÁhlaví SEKCE #3
Název .rsrc
virtuální velikost 520
Virtuální adresa C7000
600 velikost nezpracovaných dat
Ukazatel souboru C5C00 na nezpracovaná data
0 ukazatel souboru na tabulku přemístění
0 souborový ukazatel na čísla řádků
0 počet přemístění
0 počet čísel řádků
40000040 vlajek
inicializovaná data
(není určeno zarovnání)
Pouze ke čtení

ZÁhlaví SEKCE #4
.přejmenovat
Virtuální velikost B098
Virtuální adresa C8000
Velikost nezpracovaných dat B200
Ukazatel souboru C6200 na nezpracovaná data
0 ukazatel souboru na tabulku přemístění
0 souborový ukazatel na čísla řádků
0 počet přemístění
0 počet čísel řádků
42000040 vlajek
inicializovaná data
Vyřazené
(není určeno zarovnání)
Pouze ke čtení

Zprávy a výjimky

Po připojení k procesu se nejprve zobrazí seznam modulů a poté se mohou objevit další zprávy. Když se například zapojíme do calc.exe, WinDBG automaticky nastaví bod přerušení (což je jen značka používaná k zastavení aplikace). Na obrazovce se zobrazí informace o bodu zlomu:

(da8.b44): Výjimka instrukce přerušení – kód 80000003 (první šance)

Tato konkrétní zpráva je výjimkou, konkrétně výjimkou první šance. Výjimka je v podstatě zvláštní stav, který nastane během provádění programu. Výjimka první šance znamená, že se program zastavil ihned po výskytu výjimky. Výjimka druhé šance znamená, že po výskytu výjimky budou provedeny některé operace a poté program zastaví svou práci.

Registry

Po zobrazení zpráv a výjimek ladicí program vypíše stav registrů procesoru. Registry jsou speciální proměnné v procesoru, které ukládají malé kousky informací nebo sledují stav něčeho v paměti. Procesor dokáže zpracovat informace v těchto registrech velmi rychle. To je mnohem rychlejší než pokaždé získávat informace na sběrnici z RAM.

Po připojení k calc.exe WinDBG automaticky zobrazí informace o následujících registrech:

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

Později můžete tyto informace znovu duplikovat pomocí pří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

Pokud chceme získat hodnotu konkrétního registru, můžeme provést následující příkaz:

0:005> r eax
eax=7ffd9000

Informace lze získat současně z několika registrů takto:

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

Ukazatel na pokyn

Poslední příkaz je o spuštění instrukcí. Zde se také zobrazí informace, jako v případě příkazu r, co obsahuje registr EIP. EIP je registr obsahující umístění další instrukce který má být proveden procesorem. To, co zobrazí WinDBG, je ekvivalentem příkazu u eip L1, po kterém WinDBG přejde na adresu zadanou v registru EIP, převede tuto sekci na kód sestavy a zobrazí ji na obrazovce.

ntdll!DbgBreakPoint:
77663540 ccm int 3

zůstat v kontaktu

V následujících článcích se podíváme na to, jak používat WinDBG v boji: body přerušení, krokové ladění a prohlížení paměti. Nepřepínejte! J.

K identifikaci příčin modré obrazovky (BSOD) je nutné analyzovat výpis paměti. V naprosté většině případů stačí minidump, který systém vytvoří v případě kritických chyb.
Tento článek obsahuje instrukce krok za krokem pro instalaci a konfiguraci WinDBG - výkonný nástroj pro ladění, který vám umožní identifikovat skutečnou příčinu BSOD.

Krok 1 — Nastavení záznamu s malým výpisem paměti

Krok 2 — Instalace WinDBG

Chcete-li analyzovat výpisy paměti, budete muset nainstalovat ladicí program WinDBG, který je součástí sady Windows SDK. V době psaní tohoto článku nejnovější dostupné Verze Windows SDK:

  • Windows 10 SDK (stáhněte si online instalační program)
  • Windows 8.1 SDK (stáhněte si online instalační program)

Krok 3 — Mapování souborů .dmp na WinDBG

Mapujte své soubory .dmp na WinDBG, abyste usnadnili čtení a analýzu výpisů paměti. To vám umožní otevírat soubory výpisu z Průzkumníka přímo ve WinDBG, čímž se obejde jeho předběžné spuštění.


Krok 4 — Nastavení serveru symbolů pro příjem souborů symbolů ladění


Instalace a počáteční konfigurace WinDBG je nyní dokončena. Chcete-li změnit jeho vzhled, můžete přejít do nabídky Pohled- nastavení písma najdete po výběru položky Písmo a nastavení okna konzoly v Možnosti.

V době kritického selhání operační systém Windows přestane fungovat a zobrazí se modrá obrazovka smrt (BSOD). Obsah paměť s náhodným přístupem a všechny informace o chybě, ke které došlo, jsou zapsány do stránkovacího souboru. Při dalším Spouštění systému Windows vytvoří se výpis zhroucení s informacemi o ladění na základě uložených dat. V protokolu systémových událostí se vytvoří záznam závažné chyby.

Pozornost! Výpis zhroucení se nevygeneruje, pokud diskový subsystém selhal nebo kritická chyba vznikl v počáteční fázi načítání systému Windows.

Typy výpisů při selhání systému Windows

Na příkladu aktuálního operačního systému Windows 10 ( Windows Server 2016) zvažte hlavní typy výpisů paměti, které může systém vytvořit:

  • Mini výpis paměti (malý výpis paměti)(256 kB). Tento typ souboru obsahuje minimální množství informací. Obsahuje pouze chybovou zprávu BSOD, informace o ovladačích, procesech, které byly aktivní v době havárie, a který proces nebo vlákno jádra způsobilo havárii.
  • Výpis paměti jádra. Obvykle malá, jedna třetina množství fyzické paměti. Výpis paměti jádra je podrobnější než minidump. Obsahuje informace o ovladačích a programech v režimu jádra, včetně přidělené paměti jádro Windows a hardwarová abstraktní vrstva (HAL), stejně jako paměť přidělená ovladačům a dalším programům v režimu jádra.
  • Kompletní výpis paměti. Největší velikost a vyžaduje paměť rovnající se paměti RAM vašeho systému plus 1 MB požadované systémem Windows k vytvoření tohoto souboru.
  • Automatický výpis paměti. Pokud jde o informace, odpovídá výpisu paměti jádra. Liší se pouze tím, kolik místa používá k vytvoření souboru výpisu. Tento typ souboru ve Windows 7 neexistoval. Byl přidán ve Windows 8.
  • Aktivní výpis paměti. Tento typ odfiltruje prvky, které nemohou určit příčinu selhání systému. To bylo přidáno do Windows 10 a je zvláště užitečné, pokud používáte virtuální počítač nebo pokud je váš systém hostitelem Hyper-V.

Jak povolit generování výpisu paměti ve Windows?

Pomocí Win + Pause otevřete okno nastavení systému, vyberte " Další nastavení systému" (Pokročilé systémové nastavení). Na kartě " dodatečně" (Pokročilé), sekce "" (Spuštění a obnovení), klikněte na tlačítko " Parametry» (Nastavení). V okně, které se otevře, nakonfigurujte akce v případě selhání systému. Zaškrtněte políčko " Pište události do syslog » (Zapište událost do systémového protokolu), vyberte typ výpisu, který se má vygenerovat při zhroucení systému. Pokud je v zaškrtávacím políčku " Nahradit existující soubor výpisu» (Přepsat jakýkoli existující soubor) zaškrtněte políčko, soubor bude přepsán při každém selhání. Je lepší zrušit zaškrtnutí tohoto políčka, pak budete mít více informací pro analýzu. Zakázat také automatický restart systém (Automaticky restartovat).

Ve většině případů bude k analýze příčiny BSOD stačit malý výpis paměti.

Nyní, pokud dojde k BSOD, můžete analyzovat soubor výpisu a najít příčinu selhání. Minidump je standardně uložen ve složce %systemroot%\minidump. Pro analýzu souboru výpisu doporučuji použít program WinDBG(Microsoft Kernel Debugger).

Instalace WinDBG na Windows

Utility WinDBG součástí " Windows 10 SDK» (Windows 10 SDK). .

Soubor se nazývá winsdksetup.exe, velikost 1,3 MB.

Spusťte instalaci a zvolte, zda chcete balíček nainstalovat na tento počítač nebo jej stáhnout pro instalaci na jiné počítače. Nainstalujte balíček na místní počítač.

Můžete nainstalovat celý balíček, ale pro instalaci pouze nástroje pro ladění vyberte Nástroje pro ladění pro Windows.

Po instalaci naleznete zástupce WinDBG v nabídce Start.

Nastavení přidružení souborů .dmp k WinDBG

Chcete-li otevřít soubory výpisu jednoduchým kliknutím, namapujte příponu .dmp na nástroj WinDBG.

  1. Otevřete příkazový řádek jako správce a spusťte příkazy pro 64bitový systém: cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
    windbg.exe –IA
    pro 32bitový systém:
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
    windbg.exe –IA
  2. V důsledku toho budou typy souborů: .DMP, .HDMP, .MDMP, .KDMP, .WEW mapovány na WinDBG.

Nastavení serveru symbolů ladění ve WinDBG

Ladicí symboly (debug-symbols nebo symbol files) jsou datové bloky generované v procesu kompilace programu spolu se spustitelným souborem. Takové datové bloky obsahují informace o názvech proměnných, nazývaných funkcích, knihovnách atd. Tato data nejsou potřebná při spuštění programu, ale užitečná při jeho ladění. Komponenty společnosti Microsoft jsou kompilovány se symboly distribuovanými prostřednictvím serveru Microsoft Symbol Server.

Nastavte WinDBG pro použití Microsoft Symbol Server:

  • Otevřete WinDBG;
  • Přejděte do nabídky Soubor –> Cesta k souboru symbolů;
  • Napište řetězec obsahující adresu URL pro stažení symbolů ladění z webu společnosti Microsoft a složku pro uložení mezipaměti: SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols V příkladu se stáhne mezipaměť. do složky E:\Sym_WinDBG můžete zadat libovolný.
  • Nezapomeňte uložit změny v nabídce Soubor–>Uložit pracovní prostor;

WinDBG vyhledá symboly v místní složce a pokud v ní potřebné symboly nenajde, automaticky si stáhne symboly z určeného webu. Pokud chcete přidat vlastní složku symbolů, můžete to udělat takto:

SRV*E:\Sym_WinDBG*http://msdl.microsoft.com/download/symbols;c:\Symbols

Pokud není k dispozici připojení k Internetu, stáhněte si nejprve balíček symbolů ze zdroje Windows Symbol Packages.

Analýza výpisu zhroucení ve WinDBG

Ladicí program WinDBG otevře soubor výpisu a stáhne potřebné symboly pro ladění z místní složky nebo z Internetu. Během tohoto procesu nelze použít WinDBG. V dolní části okna (v příkazovém řádku debuggeru) se objeví nápis Debugee není připojen.

Příkazy se zadávají do příkazového řádku umístěného ve spodní části okna.

Nejdůležitější věcí, které je třeba věnovat pozornost, je kód chyby, který je vždy uveden v hexadecimální hodnotu a vypadá jako 0xXXXXXXXXX(uvedeno v jedné z možností - STOP:, 07.02.2019 0008F, 0x8F). V našem příkladu je kód chyby 0x139.

Ladicí program vás vyzve ke spuštění příkazu analyzovat -v, stačí najet myší na odkaz a kliknout. K čemu je tento příkaz?

  • Provádí předběžnou analýzu výpisu paměti a poskytuje detailní informace pro zahájení analýzy.
  • Tento příkaz zobrazí kód STOP a symbolický název chyby.
  • Zobrazuje zásobník volání příkazů, které vedly k selhání.
  • Kromě toho se zde zobrazují chyby IP adresy, procesu a registru.
  • Tým může poskytnout hotová doporučení pro řešení problému.

Hlavní body, kterým byste měli věnovat pozornost při analýze po provedení příkazu !analyze -v (výpis není úplný).

1: kd> !analyzovat -v


* *
*Analýza kontroly chyb*
* *
*****************************************************************************
Symbolický název chyby STOP (BugCheck)
KERNEL_SECURITY_CHECK_FAILURE (139)
Popis chyby (Komponenta jádra poškodila kritickou datovou strukturu. Toto poškození by mohlo útočníkovi umožnit převzít kontrolu nad tímto počítačem):

Komponenta jádra poškodila kritickou datovou strukturu. Poškození by mohlo potenciálně umožnit uživateli se zlými úmysly získat kontrolu nad tímto počítačem.
Argumenty chyby:

Argumenty:
Arg1: 0000000000000003, položka LIST_ENTRY byla poškozena (tj. dvojité odstranění).
Arg2: ffffd0003a20d5d0, Adresa rámce trapu pro výjimku, která způsobila kontrolu chyb
Arg3: ffffd0003a20d528, Adresa záznamu výjimky pro výjimku, která způsobila kontrolu chyb
Arg4: 0000000000000000, Rezervováno
Podrobnosti ladění:
------------------

Počítadlo ukazuje, kolikrát se systém zhroutil s podobnou chybou:

CUSTOMER_CRASH_COUNT: 1

DEFAULT_BUCKET_ID: FAIL_FAST_CORRUPT_LIST_ENTRY

Kód chyby STOP ve zkráceném formátu:

BUGCHECK_STR: 0x139

Proces, který se zhroutil (nemusí to být nutně příčina chyby, pouze tento proces běžel v paměti v době havárie):

PROCESS_NAME: sqlservr.exe

Dešifrování kódu chyby: Systém v této aplikaci zjistil přetečení zásobníku, což může útočníkovi umožnit převzít kontrolu nad touto aplikací.

ERROR_CODE: (NTSTATUS) 0xc0000409 - Systém v této aplikaci zjistil přetečení vyrovnávací paměti založené na zásobníku. Toto překročení by mohlo potenciálně umožnit uživateli se zlými úmysly získat kontrolu nad touto aplikací.
EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - Systém v této aplikaci zjistil přetečení vyrovnávací paměti založené na zásobníku. Toto překročení by mohlo potenciálně umožnit uživateli se zlými úmysly získat kontrolu nad touto aplikací.

Poslední call na stacku:

LAST_CONTROL_TRANSFER: z ffff8040117d6a9 na ffff8040116b0a0

Zásobník volání v době selhání:

STACK_TEXT:
ffffd000`3a20d2a8 ffff804`0117d6a9: 00000000`00000139 00000000`00000003 ffffd000`3a20d5d0 ffffd000`8e:nta20d
ffffd000`3a20d2b0 fffff804`0117da50: ffffe000`f3ab9080 ffffe000`fc37e001 ffffd000`3a20d5d0 fffff804`0116e2a2BugCheck+
ffffd000`3a20d3f0 ffff804`0117c150: 00000000`00000000 00000000`00000000 00000000 00000000`00000000`00000000`00000000`00000000 00000000000000
ffffd000`3a20d5d0 fffff804`01199482: ffffc000`701ba270 ffffc000`00000001 000000ea`73f68040 fffff804`000x3006KiR9:0000006
ffffd000`3a20d760 fffff804`014a455d: 00000000`00000001 ffffd000`3a20d941 ffffe000`fcacb000 ffffd000`3a20d951 ?? ::FNODOBFM::`string"+0x17252
ffffd000`3a20d8c0 ffff804`013a34ac: 00000000`00000004 00000000`00000000
ffffd000`3a20d990 ffffff804`0117d313: ffffffff`fffffffe 00000000`00000000 00000000`00000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:0W:
ffffd000`3a20da90 00007ffb`475307da: 00000000`00000000 00000000`00000000 00000000 00000000`00000000`00000000`00000000`00000000`0000000 00000000 000000 pynt 0000000 00000000000000000000000
000000ee'f25ed2b8 00000000'00000000: 00000000'00000000 00000000'00000000 00000000 00000000 000000000

Část kódu, kde došlo k chybě:

FOLLOWUP_IP:
nt!KiFastFailDispatch+d0
fffff804`0117da50 c644242000 mov byte ptr ,0
FAULT_INSTR_CODE: 202444c6
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: nt!KiFastFailDispatch+d0
FOLLOWUP_NAME: Majitel stroje

Název modulu v tabulce objektů jádra. Pokud byl analyzátor schopen detekovat problematický ovladač, zobrazí se název v polích MODULE_NAME a IMAGE_NAME:

MODULE_NAME: nt
IMAGE_NAME: ntkrnlmp.exe

1: kd > lmvm nt
Procházet úplný seznam modulů
Načtený soubor obrázku symbolu: ntkrnlmp.exe
Soubor obrázku namapované paměti: C:\ProgramData\dbg\sym\ntoskrnl.exe\5A9A2147787000\ntoskrnl.exe
Cesta k obrázku: ntkrnlmp.exe
Název obrázku: ntkrnlmp.exe
Interní název: ntkrnlmp.exe
Původní název souboru: ntkrnlmp.exe
Verze produktu: 6.3.9600.18946
FileVersion: 6.3.9600.18946 (winblue_ltsb_escrow.180302-1800)

Ve výše uvedeném příkladu analýza ukázala na soubor jádra ntkrnlmp.exe. Když analýza výpisu paměti ukazuje na systémový ovladač (například win32k.sys) nebo soubor jádra (například ntkrnlmp.exe v našem příkladu), je nejpravděpodobnější daný soubor není příčinou problému. Velmi často se ukazuje, že problém spočívá v ovladači zařízení, nastavení BIOSu nebo poruchu zařízení.

Pokud zjistíte, že BSOD je způsoben ovladačem třetí strany, jeho název bude uveden v hodnotách MODULE_NAME a IMAGE_NAME.

Například:

Cesta k obrázku: \SystemRoot\system32\drivers\cmudaxp.sys
Název obrázku: cmudaxp.sys

Otevřete vlastnosti souboru ovladače a zkontrolujte jeho verzi. Ve většině případů se problém s ovladači vyřeší jejich aktualizací.

Tyto typy selhání jsou obvykle spojeny se selháním ovladače, které může být obtížné přesně určit. Nicméně vylepšený systém sledování chyb v Windows Vista(a nejen ve Vista!) vás může často zavést k problematickému souboru. V důsledku toho se většina lidí přestane zběsile snažit pracovat na nestabilním počítači, ukládat dokumenty s paranoidní pravidelností a doufat v to nejlepší.

Na Windows se zhroutí obvykle se vytvoří tzv. „výpis paměti“. Ten lze prozkoumat pomocí bezplatného nástroje pro ladění. nástroj Windows Nástroje pro ladění, které vás mohou nasměrovat na zdroj problému. Proto vše, co musíte udělat, je:

Stáhněte si ladicí nástroj

Nástroje pro ladění systému Windows si můžete stáhnout přímo z webu společnosti Microsoft. Program funguje s mnoha operačními systémy, počínaje Windows NT 4 a konče Windows 2008, takže byste s ním neměli mít žádné problémy. Ano, nedá se říci, že by byl stabilní pod Windows 7 RC, ale podle našich testů stále funguje. Proto i pokus o diagnostiku problému z Windows 7 RC může být úspěšný.

Nakonfigurujte svůj systém

Během selhání musí váš počítač vytvořit výpisy paměti, které později poslouží jako zdroj informací pro ladicí program. Proto je důležité, aby byl systém Windows nakonfigurován pro generování výpisů. Chcete-li přizpůsobit svůj operační systém, klepněte na klikněte pravým tlačítkem myši myší na Váš počítač a vyberte Vlastnosti. Poté klikněte na záložku další možnosti Pokročilé (Advanced System Settings), na něm najděte podsekci Startup and Recovery Settings (Startup and Recovery Settings) a ujistěte se, že možnost Zápis ladicích informací je nastavena na Kernel memory dump nebo Full memory dump (úplný výpis paměti).

Dále klikněte na Start, přejděte na Programy (Všechny programy), vyberte Debugging Tools a spusťte WinDbg. V programu přejděte do nabídky Soubor a vyberte Cesta k souboru symbolu ... Poté do okna, které se otevře, napište následující řádek:

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

Ten definuje cestu ke speciálním datům – takzvaným „symbolům“ (symbolům), které mohou ladicímu nástroji pomoci při identifikaci vašeho havarovaného souboru.

Po zadání řetězce klikněte na tlačítko OK. Později při práci s debuggerem tento řádek způsobí stažení symbolů z msdl.microsoft.com a jejich uložení do složky c:\symbols.

Vyřešte svůj problém

Nyní počkejte na další selhání modré obrazovky a následné dokončení restartu počítače. Poté znovu spusťte WinDbg (uživatelé Vista musí program spouštět jako správce), klepněte na nabídku Soubor, vyberte Otevřít Crash Dump, otevřete soubor \Windows\MEMORY.DMP a program jej okamžitě začne analyzovat.

Bohužel WinDbg poskytuje velmi málo informací o tom, co dělá, takže si můžete dokonce myslet, že se program zasekl. Nicméně počkejte. Pochopte, analýza řekněme 4GB paměti není moc výkonný počítač může nějakou dobu trvat, až hodiny. Buďte proto trpěliví, ale raději nechte analýzu přes noc.

Obvykle se však výsledek dostaví během několika minut. Důkazem toho je řádek Bugcheck Analysis, který říká něco jako "Pravděpodobně způsobeno: UACReplace.sys". Přeloženo do ruštiny to znamená, že problém je možná způsoben souborem UACReplace.sys. Zadejte jej do vyhledávacího pole, například Google, a zjistíte jeho skutečný původ. Zejména pokud patří k některému z programů, které jste nainstalovali, resp nainstalovaný ovladač, pak to můžete zkusit aktualizovat nebo jemu. Možná to vyřeší vaše problémy.

Musím říct, že čas od času WinDbg neumí soubor vůbec pojmenovat, nebo prostě vybere jednu z Windows DLL. Pokud se vám to stalo, klikněte na příkazové okno nad stavovým řádkem a zadejte příkaz:

Poté stiskněte Enter. Získáte tak podrobnější zprávu, která může obsahovat informace o možné důvody vaše potíže.

Pokud tentokrát nebudete mít štěstí, nezoufejte. Ladění je poměrně obtížné i pro odborníky. Stačí tedy zavřít WinDbg a spustit analyzátor znovu po dalším pádu. Možná vám to poskytne další informace. Hodně štěstí!

Nástroje pro ladění pro Windows- Nástroje pro ladění kódu operačních systémů Windows. Jedná se o sadu volně distribuovaných programů od společnosti Microsoft určených k ladění kódu uživatelského režimu a režimu jádra: aplikací, ovladačů, služeb, modulů jádra. Toolkit obsahuje konzolové a GUI debuggery, nástroje pro práci se symboly, soubory, procesy, nástroje pro vzdálené ladění. Sada nástrojů obsahuje nástroje, pomocí kterých můžete najít příčiny poruch v různých komponentách systému. Nástroje pro ladění pro Windows s určitý okamžik nejsou k dispozici ke stažení jako samostatná distribuce a jsou součástí Windows SDK (Windows Software Development Kit). Instrumentální sestava Nástroje Windows SDK je zase k dispozici jako součást programu předplatného MSDN nebo si ji lze zdarma stáhnout jako samostatnou distribuci z msdn.microsoft.com. Podle vývojářů nejnovější a nejlepší současná verze Nástroje pro ladění pro Windows jsou obsaženy v sadě Windows SDK.

Ladicí nástroje pro Windows jsou aktualizovány a zpřístupňovány veřejnosti poměrně často a tento proces nezávisí na vydání operačních systémů. Proto pravidelně kontrolujte nové verze.

Podívejme se nyní, k čemu konkrétně slouží Debugging Tools Microsoft Windows:

  • Ladit lokální aplikace, služby (služby), ovladače a jádro;
  • Ladění přes síť vzdálené aplikace, služby (služby), ovladače a jádro;
  • Ladění běžících aplikací v reálném čase;
  • Analyzujte soubory výpisu paměti aplikací, jádra a systému jako celku;
  • Práce se systémy založenými na architektuře x86/x64/Itanium;
  • Ladění programů v uživatelském režimu a v režimu jádra;

K dispozici jsou následující verze Debugging Tools pro Windows: 32bitová x86, Intel Itanium, 64bitová x64. Potřebujeme dva z nich: x86 nebo x64.

Existuje několik způsobů, jak nainstalovat nástroje pro ladění pro Windows, v tomto článku budeme zvažovat pouze ty hlavní:

  • Instalace přes webový instalátor.
  • Instalace ladicích nástrojů pro Windows z Windows SDK ISO.
  • Instalace ladicích nástrojů pro Windows přímo z balíčků dbg_amd64.msi /dbg_x86.msi.

Zůstává nejasné, v jakém bodě, proč bych měl instalovat nástroje pro ladění do počítače? Často se přeci jen dostáváte do situace, kdy zásah do pracovní prostředí vysoce nežádoucí! A ještě více, protože instalace nového produktu, tedy provádění změn v registru / systémových souborech, může být zcela nepřijatelné. Příkladem jsou kritické servery. Proč vývojáři neuvažují o přenosných verzích aplikací, které nevyžadují instalaci?
Proces instalace balíčku Debugging Tools for Windows prochází od verze k verzi určitými změnami. Pojďme nyní rovnou do procesu instalace a podívejme se na způsoby, jakými lze sadu nástrojů nainstalovat.

Instalace ladicích nástrojů pro Windows pomocí webového instalačního programu

Přejděte na stránku Windows SDK Archive a najděte sekci s názvem Windows 10 a pod položkou „Windows 10 SDK (10586) a Microsoft Windows 10 Mobile Device Emulator (verze 10586.11)“.

Klikněte na položku INSTALOVAT SDK. Po kliknutí stáhněte a spusťte soubor sdksetup.exe, který proces zahájí Online instalace Windows SDK. V počáteční fázi instalační program zkontroluje, zda je v systému nainstalován balíček .NET Framework Nejnovější verze(aktuálně je to 4.5). Pokud balíček chybí, nabídne se instalace a po dokončení se stanice restartuje. Ihned po restartu, ve fázi autorizace uživatele, se instalační proces spustí přímo se sadou Windows SDK.

Při výběru všech součástí balíčku bez výjimky může často dojít k chybám během procesu instalace. V tomto případě se doporučuje instalovat komponenty selektivně, minimální požadovaná sada.

Po dokončení instalace Debugging Tools for Windows umístění ladicích souborů, když tato metoda naše instalace bude následující:

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

* kde x.x je konkrétní verze vývojového kitu;
Všimli jste si, že u verzí 8 a vyšších se instalační cesty znatelně liší od klasických u všech předchozích verzí ladicích nástrojů?

Obrovské plus tato metoda Instalace ladicích nástrojů pro Windows znamená instalaci verzí ladicích nástrojů pro všechny architektury najednou.

Instalace ladicích nástrojů pro Windows z Windows SDK ISO

Tato metoda zahrnuje instalaci Debugging Tools for Windows pomocí úplného instalačního obrazu Windows SDK (Software Developers Kit). Do určité doby stáhněte iso obrázek pro příslušný systém můžete navštívit stránku Windows SDK Archive. V tuto chvíli však můžete získat obraz ISO sady SDK spuštěním webového instalačního programu sdksetup.exe a výběrem položky Stáhněte si sadu Windows Software Development Kit v úvodním okně instalačního programu:

Jak bylo zjištěno, předchozí způsob instalace pomocí webového instalátoru je poměrně rozmarný a často selže. Na čisté systémy nainstalované bez problémů, avšak na dostatečně již zatíženém vzniká řada problémů. Pokud je to váš případ, použijte tuto metodu.

V souladu s tím na stránce musíte vybrat požadovanou distribuční sadu, pro mě (a myslím, že pro mnohé) v tuto chvíli je to " balíček Windows SDK pro Windows 7 a .NET Framework 4“ a klikněte na níže uvedený odkaz „Získat obraz DVD ISO“.

Při práci s webem msdn.microsoft.com vám doporučuji použít internetový prohlížeč Explorer, protože se ukázalo, že konkurenční produkty nefungují!

Podle toho je nutné volit pouze podle potřeby. Obvykle je bitovost nástrojů pro ladění pro Windows stejná jako bitovost systému. Moje testovací systémy jsou většinou 64bitové, takže ve většině případů stahuji obraz pro 64bitový systém GRMSDKX_EN_DVD.iso .
Poté po stažení obrázku musíme nějak pracovat se stávajícím ISO obrazem. Tradičním způsobem je samozřejmě vypálení CD, ale to je poměrně zdlouhavý a někdy nákladný způsob. Navrhuji použít bezplatné služby k vytvoření virtuálních diskových zařízení v systému. Osobně k tomuto účelu nejraději používám program DEAMON Tools Lite. Někdo může mít jiné preference, přímější nebo odlehčené nástroje, v chuti a barvě, jak se říká .. Po instalaci Nástroje DAEMON Lite, stačí poklepat na soubor obrázku GRMSDKX_EN_DVD.iso a v systému mám nové virtuální CD:

Poté dvojklikem aktivuji autoload a spustím Instalace Windows SDK:

Když přijde řada na výběr komponent k instalaci ze seznamu, zakážeme absolutně všechny možnosti kromě těch, které jsou vyznačeny na snímku obrazovky. To nám nyní pomůže vyhnout se zbytečným chybám.


Správně, snímek obrazovky ukazuje dvě možnosti: „Windows Performance Toolkit“ a „Debugging Tools for Windows“. Vyberte si obojí, protože Windows Performance Toolkit se vám při práci jistě bude hodit! Dále po kliknutí na tlačítko "Další" instalace pokračuje normální mód. A na konci uvidíte nápis "Installation Complete".
Po dokončení instalace budou pracovní adresáře sady Debugging Tools for Windows následující:

  • Pro x86 verzi:
  • Pro x64 verzi:

Tím je instalace ladicích nástrojů pro Windows dokončena.

Instalace ladicích nástrojů pro Windows prostřednictvím souboru MSI

Pro případ problémů při instalaci Debugging Tools for Windows dvěma předchozími způsoby máme ještě jeden, nejspolehlivější a léty prověřený, který pomohl takříkajíc nejednou. Kdysi, před integrací do Windows SDK, byly Debugging Tools for Windows dostupné jako samostatný .msi instalátor, který lze stále najít, ale již v útrobách distribuce Windows SDK. Vzhledem k tomu, že již máme po ruce ISO obraz Windows SDK, nemůžeme jej připojit do systému, ale jednoduše otevřít pomocí známého archivátoru WinRAR, případně jiného produktu, který pracuje s obsahem ISO disků.

Po otevření obrázku musíme přejít do adresáře "Setup" umístěného v kořenovém adresáři a poté vybrat jeden z adresářů:

  • Instalace 64bitové verze: \Setup\WinSDKDebuggingTools_amd64 a rozbalte soubor dbg_amd64.msi z tohoto adresáře.
  • Instalace 32bitové verze: \Setup\WinSDKDebuggingTools a rozbalte soubor dbg_x86.msi z tohoto adresáře.

Po dokončení instalace budou pracovní adresáře sady Debugging Tools for Windows následující:

  • Pro x86 verzi: C:\Program Files (x86)\Debugging Tools for Windows (x86)
  • Pro x64 verzi: C:\Program Files\Debugging Tools for Windows (x64)

V tomto okamžiku lze instalaci Debugging Tools for Windows považovat za dokončenou.

dodatečné informace

Nevím, s čím to souvisí, možná s mojí neopatrností, ale po instalaci Debugging Tools for Windows instalátor nenastaví v proměnné Path system path cestu k adresáři s debuggerem. To ukládá určitá omezení pro spouštění různých ladicích úloh přímo z konzole. Proto při absenci cesty sám píšu do okna Proměnné prostředí cesta k ladicím nástrojům:

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

* Ve vašem případě se cesty mohou lišit jak kvůli použití OS s jinou bitovou verzí, tak kvůli použití SDK jiné verze.

Nástroje balíčku Debugging Tools for Windows mohou fungovat jako přenosné aplikace, stačí je zkopírovat pracovní systém katalog Microsoft Windows Performance Toolkit a používat jej jako přenosnou verzi na produkčním serveru. Nezapomeňte však vzít v úvahu kapacitu systému !! I když jste provedli kompletní instalaci balíčku na kritickém systému, můžete začít pracovat ihned po instalaci, není vyžadován žádný restart.

Nástroje pro ladění pro Windows

A nyní konečně zde je složení ladicích nástrojů pro Windows:

Soubor Účel
adplus.doc Dokumentace k obslužnému programu ADPlus.
adplus.exe Konzolová aplikace, která automatizuje práci ladicího programu cdb za účelem vytváření výpisů, souborů protokolu pro jeden nebo více procesů.
agestore.exe Obslužný program pro odstranění zastaralých souborů z úložiště používaného serverem symbolů nebo zdrojovým serverem.
breakin.exe Nástroj, který umožňuje odeslat vlastní kombinaci přerušení procesům, podobně jako při stisknutí CTRL+C.
cdb.exe Debugger konzoly uživatelského režimu.
convertstore.exe Pomůcka pro převod postav z 2vrstvých na 3vrstvé.
dbengprx.exe Ripiter (proxy server) pro vzdálené ladění.
dbgpc.exe Nástroj pro zobrazení informací o stavu volání RPC.
dbgsrv.exe Proces serveru používaný pro vzdálené ladění.
dbh.exe Nástroj pro zobrazení informací o obsahu souboru symbolů.
dumpchk.exe Nástroj pro ověření výpisu. Pomůcka pro rychlá kontrola soubor výpisu.
dumpexam.exe Nástroj pro analýzu výpisu paměti. Výsledkem je výstup do %SystemRoot%\MEMORY.TXT .
gflags.exe Editor příznaků globálního systému. Nástroj spravuje klíče registru a další nastavení.
i386kd.exe Zavinovačka pro kd. Bylo to to, čemu se kdysi říkalo kd pro systémy založené na Windows NT/2000 pro počítače x86? Pravděpodobně odešel z důvodu kompatibility.
ia64kd.exe Zavinovačka pro kd. Bylo to to, čemu se kdysi říkalo kd pro systémy založené na Windows NT/2000 pro stroje ia64? Pravděpodobně odešel z důvodu kompatibility.
kd.exe Debugger konzoly v režimu jádra.
kdbgctrl.exe Nástroj pro správu ladění jádra. Nástroj pro správu a konfiguraci připojení ladění jádra.
kdsrv.exe Připojovací server pro KD. Nástroj je malá aplikace, která běží a čeká na vzdálená připojení. kd běží na klientovi a připojuje se k tomuto serveru pro vzdálené ladění. Server i klient musí pocházet ze stejného sestavení Debugging Tools.
kill.exe Nástroj pro ukončení procesů.
list.exe Nástroj pro zobrazení obsahu souboru na obrazovce. Tato miniaturní utilita byla přibalena k jedinému účelu – prohlížení velkého textu nebo souborů protokolu. Zabírá málo místa v paměti, protože načítá text po částech.
logger.exe Malý debugger, který může pracovat pouze s jedním procesem. Obslužný program vloží soubor logexts.dll do prostoru procesu, který zaznamená všechna volání funkcí a další akce zkoumaného programu.
logviewer.exe Nástroj pro prohlížení protokolů zapsaných ladicím programem logger.exe.
ntsd.exe Microsoft NT Symbolic Debugger (NTSD). Ladicí program, který je identický s cdb, kromě toho, že při spuštění vytvoří textové okno. Stejně jako cdb je i ntsd schopen ladit konzolové aplikace i grafické aplikace.
pdbcopy.exe Nástroj pro odstranění soukromých symbolů ze souboru symbolů, ovládající veřejné symboly obsažené v souboru symbolů.
remote.exe Utilita pro vzdálené ladění a dálkové ovládání jakéhokoli ladicího programu konzoly KD, CDB a NTSD. Umožňuje vzdáleně spouštět všechny tyto konzolové debuggery.
rtlist.exe Vzdálený prohlížeč úloh. Nástroj slouží k zobrazení seznamu běžící procesy prostřednictvím procesu serveru DbgSrv.
symchk.exe Nástroj pro stahování symbolů ze serveru Symboly společnosti Microsoft a vytvoření místní mezipaměti symbolů.
symstore.exe Utilita pro vytvoření sítě popř místní úložiště postavy (2-tier/3-tier). Úložiště symbolů je specializovaný adresář na disku, který je vytvořen podle určité struktury a obsahuje symboly. V kořenovém adresáři symbolů se vytvoří struktura podsložek s názvy shodnými s názvy komponent. Každá z těchto podsložek zase obsahuje vnořené podsložky se speciálními názvy získanými hašováním binárních souborů. Obslužný program symstore prohledává složky součástí a přidává nové součásti do úložiště symbolů, kde je může načíst jakýkoli klient. Říká se, že symstore se používá k získávání symbolů z 0-vrstvého úložiště a jejich vkládání do 2-vrstvého/3-vrstvého úložiště.
tlist.exe Prohlížeč úkolů. Nástroj pro výpis všech běžících procesů.
umdh.exe Nástroj haldy výpisu v uživatelském režimu. Nástroj pro analýzu hald vybraného procesu. Umožňuje zobrazit různé možnosti pro haldu.
usbview.exe USB prohlížeč. nástroj k zobrazení USB zařízení připojený k počítači.
vmdemux.exe Demultiplexer virtuálního stroje. Vytvoří více pojmenovaných kanálů pro jedno připojení COM. Kanály se používají k ladění různých součástí virtuálního počítače
windbg.exe Debugger uživatelského režimu a režimu jádra s GUI.