Norėdami nustatyti priežastis mėlyni ekranai(BSOD) turi išanalizuoti atminties iškrovą. Daugeliu atvejų pakanka mini dump, kurį sistema sukuria kritinių klaidų atveju.
Šiame straipsnyje yra žingsnis po žingsnio instrukcija WinDBG diegimui ir konfigūravimui - galingas derinimo įrankis, leidžiantis nustatyti tikrąją BSOD priežastį.

1 veiksmas – mažos atminties iškelties įrašymo nustatymas

2 veiksmas – „WinDBG“ diegimas

Norėdami analizuoti atminties iškrovas, turėsite įdiegti „WinDBG“ derinimo priemonę, kuri yra įtraukta į „Windows“ SDK. Rašymo metu naujausios galimos Windows versijos SDK:

  • Windows 10 SDK (atsisiųskite internetinę diegimo programą)
  • Windows 8.1 SDK (atsisiųskite internetinę diegimo programą)

3 veiksmas – .dmp failų susiejimas su WinDBG

Susiekite savo .dmp failus su WinDBG, kad būtų lengviau skaityti ir analizuoti atminties išklotus. Tai leis jums atidaryti iškeliamus failus iš Explorer tiesiogiai WinDBG, apeinant preliminarų paleidimą.


4 veiksmas – Simbolių serverio nustatymas derinimo simbolių failams gauti


WinDBG diegimas ir pradinė konfigūracija baigta. Norėdami pakeisti jo išvaizdą, galite eiti į meniu peržiūrėti- šrifto nustatymus rasite pasirinkę elementą Šriftas ir konsolės lango nustatymus Galimybės.

2010 m. birželio 22 d

Anksčiau Windbg buvo galima atsisiųsti atskirai. Tačiau naujausiose versijose „Microsoft“ ją laiko „Windows SDK“ dalimi. Žemiau rasite atsisiuntimo nuorodas.

Windows 10

Naujausią „Windbg“, skirtą „Windows 7“, versiją galite atsisiųsti iš nuorodos https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

Windows 7

Atsisiųskite diegimo programas iš aukščiau pateiktų nuorodų. Atminkite, kad tai neatsisiunčia viso SDK, tai tik diegimo programa. kai paleisite failą, tu gali pasirinkite, kuriuos įrankius norite atsisiųsti. Jei jus domina tik „Windbg“, galite neįtraukti visa kita ir skiltyje „Bendrosios priemonės“ pasirinkti tik „Debugging tools“

Aukščiau pateiktas paketas įdiegia windbg 6.12 versiją. Jei norite greitai įdiegti windbg, galite pasirinkti senesnę versiją (6.11), kurią galima atsisiųsti iš
nuoroda, pateikta šio įrašo pabaigoje.

Įdiegę galite rasti programą pradžios meniu-> Visos programos -> Derinimo įrankiai, skirti Windows -> Windbg

Derinimo įrankiai, skirti „Windows“.- Veikimo kodo derinimo įrankiai Windows sistemos. Tai yra „Microsoft“ laisvai platinamų programų rinkinys, skirtas derinti vartotojo režimo ir branduolio režimo kodą: programas, tvarkykles, paslaugas, branduolio modulius. Įrankių rinkinyje yra konsolės ir GUI derinimo priemonės, darbo su simboliais paslaugos, failai, procesai, nuotolinio derinimo priemonės. Įrankių rinkinyje yra paslaugų, su kuriomis galite rasti įvairių sistemos komponentų gedimų priežastis. Derinimo įrankiai, skirti „Windows“. nuo tam tikro momento negalima atsisiųsti atskiro platinimo pavidalu ir yra „Windows“ SDK („Windows“ programinės įrangos kūrimo rinkinio) dalis. Instrumentinis rinkinys „Windows“ įrankiai Savo ruožtu SDK galima įsigyti kaip MSDN prenumeratos programos dalį arba jį galima laisvai atsisiųsti kaip atskirą platinimą iš msdn.microsoft.com. Pasak kūrėjų, naujausias ir geriausias Dabartinė versija Derinimo įrankiai, skirti „Windows“, yra „Windows“ SDK.

Derinimo įrankiai, skirti „Windows“, gana dažnai atnaujinami ir prieinami visuomenei, o šis procesas niekaip nepriklauso nuo leidimo. Operacinės sistemos. Todėl periodiškai tikrinkite, ar nėra naujų versijų.

Dabar pažiūrėkime, kam ypač skirti derinimo įrankiai Microsoft Windows:

  • Vietinių programų, paslaugų (paslaugų), tvarkyklių ir branduolio derinimas;
  • Derinimas per tinklą nuotolinės programos, paslaugos (paslaugos), tvarkyklės ir branduolys;
  • Derinti veikiančias programas realiuoju laiku;
  • Analizuoti programų, branduolio ir visos sistemos atminties iškelties failus;
  • Darbas su sistemomis, paremtomis x86/x64/Itanium architektūromis;
  • Derinti vartotojo režimo ir branduolio režimo programas;

Yra kitos versijos Derinimo įrankiai, skirti „Windows“: 32 bitų x86, „Intel Itanium“, 64 bitų x64. Mums reikia dviejų iš jų: x86 arba x64.

Yra keli būdai, kaip įdiegti „Windows“ skirtus derinimo įrankius, šiame straipsnyje apžvelgsime tik pagrindinius:

  • Diegimas naudojant žiniatinklio diegimo programą.
  • „Windows“ derinimo įrankių diegimas iš ISO „Windows“ vaizdas SDK.
  • „Windows“ skirtų derinimo įrankių diegimas tiesiai iš dbg_amd64.msi /dbg_x86.msi paketų.

Lieka neaišku, kada, kodėl turėčiau kompiuteryje įdiegti derinimo įrankius? Juk dažnai susiduriate su situacija, kai įsikišate į darbo aplinka labai nepageidautina! Ir dar labiau todėl, kad naujo produkto diegimas, ty registro / sistemos failų keitimas, gali būti visiškai nepriimtinas. Pavyzdžiai yra itin svarbūs serveriai. Kodėl kūrėjai neatsižvelgia į nešiojamas programų versijas, kurių nereikia įdiegti?
Nuo versijos iki versijos „Windows“ paketo derinimo įrankių diegimo procesas keičiasi. Dabar pereikime tiesiai prie diegimo proceso ir pažiūrėkime, kaip galima įdiegti įrankių rinkinį.

„Windows“ skirtų derinimo įrankių diegimas naudojant žiniatinklio diegimo programą

Eikite į „Windows SDK“ archyvo puslapį ir raskite skyrių „Windows 10“ ir po elementu „Windows 10 SDK (10586) ir „Microsoft Windows 10 Mobile Device Emulator“ (10586.11 versija)“.

Spustelėkite elementą ĮDIEGTI SDK. Spustelėję atsisiųskite ir paleiskite failą sdksetup.exe, kuris inicijuoja „Windows SDK“ diegimą internetu. Pradiniame etape diegimo programa patikrins, ar sistemoje yra įdiegtas .NET Framework paketas Naujausia versijaŠis momentas tai 4,5). Jei paketo trūksta, bus pasiūlytas diegimas ir stotis bus paleista iš naujo, kai bus baigta. Iškart po perkrovimo, vartotojo autorizacijos etape, diegimo procesas prasideda tiesiogiai naudojant „Windows“ SDK.

Dažnai renkantis visus be išimties paketo komponentus, diegimo metu gali atsirasti klaidų. Tokiu atveju rekomenduojama komponentus montuoti pasirinktinai, minimalų reikalingą komplektą.

Baigus diegti „Windows“ skirtus derinimo įrankius, derinimo failų vieta, kada šis metodas mūsų montavimas bus toks:

  • 64 bitų versijos: C:\Programų failai (x86)\Windows Kits\x.x\Debuggers\x64
  • 32 bitų versijos: C:\Programų failai (x86)\Windows Kits\x.x\Debuggers\x86

* kur x.x yra konkreti kūrimo rinkinio versija;
Pastebėjome, kad 8 ir naujesnėse versijose diegimo keliai visiems pastebimai skiriasi nuo klasikinių ankstesnės versijos derinimo įrankiai?

Didžiulis pliusas šis metodas Diegiant derinimo įrankius, skirtus „Windows“, reikia vienu metu įdiegti derinimo įrankių versijas visoms architektūroms.

„Windows“ skirtų derinimo įrankių diegimas iš „Windows SDK ISO“.

Šis metodas apima derinimo įrankių, skirtų Windows, įdiegimą naudojant visą Windows SDK (Software Developers Kit) diegimo vaizdą. Iki tam tikro laiko atsisiųskite iso vaizdas Norėdami rasti tinkamą sistemą, galite apsilankyti Windows SDK archyvo puslapyje. Tačiau šiuo metu galite gauti SDK ISO atvaizdą paleisdami žiniatinklio diegimo programą sdksetup.exe ir pasirinkę elementą Atsisiųskite „Windows“ programinės įrangos kūrimo rinkinį diegimo programos pradžios lange:

Kaip paaiškėjo, ankstesnis diegimo būdas naudojant žiniatinklio diegimo programą yra gana kaprizingas ir dažnai nepavyksta. Švariose sistemose jis įdiegiamas be problemų, tačiau pakankamai apkrautose sistemose kyla daug problemų. Jei taip yra jūsų atveju, naudokite šį metodą.

Atitinkamai puslapyje reikia pasirinkti reikiamą platinimo rinkinį, man (ir manau daugeliui) šiuo metu tai yra "Windows SDK, skirta Windows 7 ir .NET Framework 4" ir šiek tiek žemiau spustelėkite nuorodą "Gauti DVD ISO vaizdas“.

Dirbant su svetaine msdn.microsoft.com patariu naudoti naršyklę Internet Explorer, nes buvo pastebėti konkuruojančių gaminių neveikiantys atvejai!

Atitinkamai, reikia pasirinkti tik tiek, kiek reikia. Paprastai „Windows“ skirtų derinimo įrankių bitumas yra toks pat, kaip ir sistemos bitumas. Mano bandomosios sistemos dažniausiai yra 64 bitų, todėl dažniausiai atsisiunčiau 64 bitų sistemos vaizdą GRMSDKX_EN_DVD.iso .
Tada, atsisiuntę vaizdą, turime kažkaip dirbti su esamu ISO atvaizdu. Žinoma, tradicinis būdas yra įrašyti kompaktinį diską, tačiau tai gana ilgas ir kartais brangus būdas. Siūlau naudoti nemokamos komunalinės paslaugos sukurti virtualaus disko įrenginius sistemoje. Asmeniškai aš norėčiau naudoti DEAMON Tools Lite programą šiam tikslui. Kažkas gali turėti kitų pageidavimų, tiesioginių ar lengvesnių paslaugų, skonio ir spalvos, kaip sakoma .. Po įdiegimo DAEMON įrankiai Lite, aš tiesiog dukart spustelėjau vaizdo failą GRMSDKX_EN_DVD.iso ir savo sistemoje turiu naują virtualų kompaktinį diską:

Tada dukart spusteliu, kad suaktyvinčiau automatinį įkėlimą ir paleidžiu Windows diegimas SDK:

Atėjus eilei iš sąrašo pasirinkti montuojamus komponentus, išjungiame absoliučiai visas parinktis, išskyrus tas, kurios pažymėtos ekrano kopijoje. Tai padės mums dabar išvengti nereikalingų klaidų.


Teisingai, ekrano kopijoje rodomos dvi parinktys: „Windows Performance Toolkit“ ir „Debugging Tools for Windows“. Pasirinkite abu, nes „Windows Performance Toolkit“ tikrai pravers jūsų darbe! Be to, paspaudus mygtuką „Kitas“, diegimas tęsiamas įprastu režimu. O pabaigoje pamatysite užrašą „Installation Complete“.
Baigus diegti „Windows“ derinimo įrankių rinkinio darbiniai katalogai bus tokie:

  • x86 versijai:
  • x64 versijai:

Tai užbaigia „Windows“ skirtų derinimo įrankių diegimą.

„Windows“ skirtų derinimo įrankių diegimas naudojant .msi failą

Iškilus problemoms diegiant „Windows“ skirtus derinimo įrankius dviem ankstesniais būdais, vis tiek turime dar vieną, patikimiausią ir laiko patikrintą, kuris padėjo, taip sakant, ne kartą. Kartą, prieš integruojant į „Windows SDK“, „Windows“ skirtus derinimo įrankius buvo galima įsigyti kaip atskirą .msi diegimo programą, kurią vis dar galima rasti, bet jau „Windows“ SDK platinimo viduje. Kadangi jau turime „Windows SDK“ ISO atvaizdą, negalime jo prijungti prie sistemos, o tiesiog atidaryti naudodami gerai žinomą „WinRAR“ archyvatorių arba bet kurį kitą produktą, kuris veikia su ISO diskų turiniu.

Atidarę vaizdą, turime eiti į „Setup“ katalogą, esantį šaknyje, ir pasirinkti vieną iš katalogų:

  • Norėdami įdiegti 64 bitų versiją: \Setup\WinSDKDebuggingTools_amd64 ir išpakuokite failą dbg_amd64.msi iš šio katalogo.
  • Norėdami įdiegti 32 bitų versiją: \Setup\WinSDKDebuggingTools ir išpakuokite failą dbg_x86.msi iš šio katalogo.

Baigus diegti „Windows“ derinimo įrankių rinkinio darbiniai katalogai bus tokie:

  • x86 versijai: C:\Programų failai (x86)\Debugging Tools for Windows (x86)
  • x64 versijai: C:\Program Files\Debugging Tools for Windows (x64)

Šiuo metu „Windows“ skirtų derinimo įrankių diegimas gali būti laikomas baigtu.

Papildoma informacija

Nežinau su kuo tai susiję, gal dėl mano neatsargumo, bet įdiegus Debugging Tools for Windows, diegimo programa Path system path kintamajame nenustato kelio į katalogą su derintuvu. Tai nustato tam tikrus apribojimus įvairių derinimo užduočių vykdymui tiesiai iš konsolės. Todėl, nesant kelio, aš pats rašau lange aplinkos įvairovė kelias į derinimo įrankius:

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

* Jūsų atveju keliai gali skirtis ir dėl skirtingo bitumo OS, ir dėl skirtingos versijos SDK naudojimo.

„Windows“ paketo derinimo įrankių priemonės gali veikti kaip nešiojamos programos, tiesiog nukopijuokite iš darbo sistema katalogą Microsoft Windows Performance Toolkit ir naudoti jį kaip nešiojamą versiją gamybos serveryje. Tačiau nepamirškite atsižvelgti į sistemos pajėgumą !! Net jei visiškai įdiegėte paketą svarbioje sistemoje, galite pradėti dirbti iškart po įdiegimo, nereikia perkrauti.

Derinimo įrankiai, skirti „Windows“.

Ir dabar, galiausiai, čia yra „Windows“ skirtų derinimo įrankių sudėtis:

Failas Tikslas
adplus.doc ADPlus programos dokumentacija.
adplus.exe Konsolės programa, kuri automatizuoja cdb derintuvo darbą, kad būtų sukurtos vieno ar kelių procesų ištvaros, žurnalo failai.
agestore.exe Priemonė, skirta pašalinti pasenusius failus iš saugyklos, kurią naudoja simbolių serveris arba šaltinio serveris.
breakin.exe Priemonė, leidžianti procesams siųsti pasirinktinį pertraukų derinį, panašiai kaip paspaudus CTRL+C.
cdb.exe Vartotojo režimo konsolės derinimo priemonė.
convertstore.exe Naudingumas simboliams konvertuoti iš 2 pakopų į 3 pakopų.
dbengprx.exe Ripiter (proxy serveris) nuotoliniam derinimui.
dbgpc.exe Priemonė informacijai apie RPC skambučio būseną rodyti.
dbgsrv.exe Serverio procesas, naudojamas nuotoliniam derinimui.
dbh.exe Priemonė informacijai apie simbolių failo turinį rodyti.
dumpchk.exe Išmetimo tikrinimo įrankis. Priemonė, skirta greitai patikrinti iškelties failą.
dumpexam.exe Priemonė, skirta atminties ištrynimui analizuoti. Rezultatas išvedamas į %SystemRoot%\MEMORY.TXT.
gflags.exe Pasaulinės sistemos vėliavėlių redaktorius. Priemonė tvarko registro raktus ir kitus parametrus.
i386kd.exe Įvynioklis kd. Ar tai buvo tai, ką kd kažkada vadino Windows NT/2000 pagrįstomis sistemomis x86 įrenginiams? Tikriausiai paliko dėl suderinamumo priežasčių.
ia64kd.exe Įvynioklis kd. Ar taip kd kažkada vadinosi Windows NT/2000 pagrįstose sistemose, skirtose ia64 įrenginiams? Tikriausiai paliko dėl suderinamumo priežasčių.
kd.exe Branduolio režimo konsolės derinimo priemonė.
kdbgctrl.exe Branduolio derinimo valdymo įrankis. Priemonė, skirta valdyti ir konfigūruoti branduolio derinimo ryšį.
kdsrv.exe KD ryšio serveris. Priemonė yra nedidelė programa, kuri veikia ir laukia nuotolinio ryšio. kd veikia kliente ir prisijungia prie to serverio nuotoliniam derinimui. Tiek serveris, tiek klientas turi būti iš to paties derinimo įrankių rinkinio.
kill.exe Naudingumas užbaigti procesus.
list.exe Priemonė, skirta failo turiniui rodyti ekrane. Ši miniatiūrinė priemonė buvo susieta su vienu tikslu – peržiūrėti didelius tekstinius arba žurnalo failus. Tai užima mažai vietos atmintyje, nes tekstas įkeliamas dalimis.
logger.exe Mažas derintuvas, galintis veikti tik su vienu procesu. Priemonė įveda logexts.dll į proceso erdvę, kuri įrašo visus funkcijų iškvietimus ir kitus tiriamos programos veiksmus.
logviewer.exe Priemonė, skirta peržiūrėti logger.exe derinimo programos įrašytus žurnalus.
ntsd.exe „Microsoft NT Symbolic Debugger“ (NTSD). Derinimo priemonė, identiška cdb, išskyrus tai, kad paleidžiant sukuria teksto langą. Kaip ir cdb, ntsd gali derinti ir konsolės programas, ir grafines programas.
pdbcopy.exe Priemonė, skirta pašalinti privačius simbolius iš simbolių failo, valdyti viešuosius simbolius, įtrauktus į simbolių failą.
remote.exe Priemonė, skirta nuotoliniam bet kokio KD, CDB ir NTSD konsolės derintuvo derinimui ir nuotoliniam valdymui. Leidžia nuotoliniu būdu paleisti visas šias konsolės derinimo priemones.
rtlist.exe Nuotolinė užduočių peržiūros priemonė. Priemonė naudojama vykdomiems procesams per DbgSrv serverio procesą išvardyti.
symchk.exe Priemonė, skirta atsisiųsti simbolius iš Microsoft simbolių serverio ir sukurti vietinę simbolių talpyklą.
symstore.exe Naudingumas sukurti tinklą arba vietinė parduotuvė simbolių (2 pakopų/3 pakopų). Simbolių saugykla yra specializuotas katalogas diske, sukurtas pagal tam tikrą struktūrą ir kuriame yra simbolių. Simbolių šakniniame kataloge sukuriama poaplankio struktūra, kurios pavadinimai yra identiški komponentų pavadinimams. Savo ruožtu kiekviename iš šių poaplankių yra įdėtų poaplankių su specialiais pavadinimais, gautais maišant dvejetainius failus. „Systemstore“ paslaugų programa nuskaito komponentų aplankus ir prideda naujų komponentų į simbolių saugyklą, kur bet kuris klientas gali juos nuskaityti. Teigiama, kad Symstore naudojama simboliams gauti iš 0 lygio saugyklos ir įdėti juos į 2 pakopų / 3 pakopų saugyklą.
tlist.exe Užduočių peržiūros programa. Visų vykdomų procesų sąrašo įrankis.
umdh.exe Vartotojo režimo iškelties krūvos įrankis. Pasirinkto proceso krūvoms analizuoti skirta priemonė. Leidžia rodyti įvairias krūvos parinktis.
usbview.exe USB peržiūros priemonė. naudingumas peržiūrėti USB įrenginiai prijungtas prie kompiuterio.
vmdemux.exe Demultiplekseris Virtuali mašina. Sukuria kelis pavadintus vamzdžius vienam COM ryšiui. Kanalai naudojami įvairiems virtualios mašinos komponentams derinti
windbg.exe Vartotojo režimo ir branduolio režimo derinimo priemonė su GUI.

Įvadas į WinDBG – 1 dalis

Aleksandras Antipovas

WinDBG yra puikus derinimo įrankis. Pagal numatytuosius nustatymus jis gali turėti ne itin patogią sąsają ir be juodo fono, tačiau šiuo metu tai yra vienas galingiausių ir stabiliausių „Windows“ derinimo priemonių. Šiame straipsnyje apžvelgsiu WinDBG pagrindus, kad galėtumėte pradėti naudotis juo.


WinDBG yra puikus derinimo įrankis. Pagal numatytuosius nustatymus jis gali turėti ne itin patogią sąsają ir be juodo fono, tačiau šiuo metu tai yra vienas galingiausių ir stabiliausių „Windows“ derinimo priemonių. Šiame straipsnyje apžvelgsiu WinDBG pagrindus, kad galėtumėte pradėti naudotis juo.

Tai pirmasis straipsnis iš serijos apie WinDBG. Visų straipsnių, įtrauktų į šią seriją, sąrašas:

  • 1 dalis - diegimas, sąsaja, simboliai, nuotolinis/vietinis derinimas, pagalbos sistema, moduliai, registrai.
  • 2 dalis – lūžio taškai.
  • 3 dalis – atminties patikrinimas, programos žingsnis po žingsnio derinimas, patarimai ir gudrybės.

Šiame straipsnyje apžvelgsime proceso montavimą ir prijungimą prie jo, o tolesniuose – lūžio taškus, perėjimą ir atminties patikrinimą.

WinDBG diegimas

Palyginti su Windows 7, WinDBG diegimo procesas Windows 8 šiek tiek pasikeitė. Šiame skyriuje apžvelgsime abiejų operacinių sistemų derinimo priemonės įdiegimą.

„WinDBG“ diegimas sistemoje „Windows 8“.

„Windows 8“ sistemoje „WinDBG“ yra įtrauktas į „Windows Driver Kit“ (WDK). Galite įdiegti vizualinė studija ir WDK, arba atskirai įdiekite derinimo įrankių paketą, skirtą „Windows 8.1“, kuriame yra „WinDBG“.

Diegimo programa paklaus, ar norite įdiegti „WinDBG“ vietoje, ar atsisiųsti visą kūrimo paketą kitam kompiuteriui. Pastaroji iš esmės yra lygiavertė neprisijungus diegimo programa, o tai labai patogu, jei ateityje norite įdiegti paketą kitose sistemose.

1 pav. Diegimo tipo pasirinkimas

Kitame lange turite panaikinti visų elementų žymėjimą, išskyrus "Debugging Tools for Windows" ir spustelėkite mygtuką "Atsisiųsti".

Kai diegimo programa baigs savo darbą, eikite į katalogą, kuriame buvo atsiųstas paketas (pagal numatytuosius nustatymus jis yra c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK) ir atlikite diegimo procedūrą.

„WinDBG“ diegimas „Windows 7“ ir senesnėse versijose

„Windows 7“ ir senesnėse versijose „WinDBG“ yra „Windows derinimo įrankių“ paketo, įtraukto į „Windows SDK“ ir „.Net Framework“, dalis. Turėsite atsisiųsti diegimo programą, o tada diegimo proceso metu pasirinkti „Debugging Tools for Windows“.

Diegdamas pasirenku parinktį „Derinimo įrankiai“, esančią skiltyje „Perskirstomi paketai“, kad sukurčiau atskirą diegimo programą, kuri palengvintų tolesnius diegimus.

2 pav. Diegimo parinkčių pasirinkimas norint sukurti atskirą diegimo programą

Baigę diegti, turėtumėte turėti WinDBG diegimo programas įvairios platformos(c:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\).

3 pav. Aplankas su WinDBG diegimo programomis įvairioms platformoms

WinDBG sąsaja

4 pav. WinDBG išvaizda

Pirmą kartą pamatę WinDGB išvaizdą ir veikimą, suprasite, kad derinimo priemonė yra bauginančiai paprasta. Dauguma WinDBG funkcijų išmokstamos derinant procesą. Užuot gaišę laiką aprašydami sąsają, tolesniuose skyriuose apžvelgsime tik svarbiausius dalykus.

Svarbiausias dalykas, kurį reikia žinoti apie derinimo sąsają, yra komandų langas, kurį sudaro dvi sritys. Pirmoji sritis: langas, kuriame rodomas komandų vykdymo rezultatas. Antroji sritis: mažas teksto laukas komandoms įvesti.

5 pav.: WinDBG komandų langas

Simboliai

Daugeliu atvejų WinDBG nereikalauja jokių specialių nustatymų ir veikia tinkamai iš karto. Tačiau vienas svarbus dalykas, kurį reikia pakoreguoti, yra simboliai. Simboliai yra failai, kurie generuojami kartu su vykdomuoju failu programos kompiliavimo metu ir kuriuose yra derinimo informacijos (funkcijų ir kintamųjų pavadinimų). Derinimo informacija leidžia ištirti programos funkcionalumą derinant arba išardant. Daugelis „Microsoft“ komponentų yra sudaryti naudojant simbolius, kurie platinami per „Microsoft Symbol Server“. Su likusiais vykdomaisiais failais viskas nėra taip rožinė – labai retai failai su derinimo informacija yra susieti su programa. Daugeliu atvejų įmonės riboja prieigą prie tokios informacijos.

Norėdami sukonfigūruoti WinDBG naudoti Microsoft Symbol Server, eikite į skyrių Failas: Simbolių failo kelias ir nustatykite kelią į SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols. Žinoma, šiek tiek keista, kad žvaigždutės naudojamos kaip skyriklis. Kai nustatysite „Microsoft Symbol Server“, simboliai bus atsisiųsti į aplanką C:\Symbols.

6 pav. Microsoft sąranka Simbolių serveris

WinDBG automatiškai įkels dvejetainių failų simbolius, kai reikia. Taip pat galite pridėti savo simbolių aplanką, pavyzdžiui:

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

Simbolių pridėjimas derinant

Jei derinant reikia importuoti simbolius, tai galite padaryti naudodami .sympath (komandos langas pasirodys, kai prisijungsite prie proceso). Pavyzdžiui, norėdami pridėti aplanką c:\SomeOtherSymbolFolder, įveskite šią komandą:

0:025> .sympath+ c:\SomeOtherSymbolFolder
Simbolių paieškos kelias yra: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
Išplėstinis simbolių paieškos kelias yra: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

Pravartu iš naujo įkelti simbolius pridėjus ar pakeitus kelius:

0:025> .įkelti iš naujo
Perkraunami srovės moduliai
................................................................
...............................................

Įkeltų simbolių tikrinimas

Norėdami pamatyti, kuriuose moduliuose įkelti simboliai, galite naudoti komandą x*!. Nors WinDBG simbolius įkelia tik tiek, kiek reikia, x*! bus rodomi simboliai, kuriuos galima įkelti. Galite priverstinai įkelti simbolius naudodami komandą ld * (tai gali užtrukti šiek tiek laiko ir galite sustabdyti šį procesą apsilankę Debug:Break).

Dabar matome kiekvieno modulio simbolius.

8 pav. Simbolių sąrašas

Vietinio proceso derinimas

Derindami vietinį procesą, turite dvi parinktis:

  1. Jau užsikabink veikiantis procesas.
  2. Paleiskite procesą per WinDBG.

Kiekvienas metodas turi savo privalumų ir trūkumų. Jei, tarkime, paleidžiate programą per WinDBG, turite specialių derinimo parinkčių (pvz., derinimo krūvos), dėl kurių programa gali sugesti. Kita vertus, yra ir programų, kurios sugenda, kai prie jų pridedamas derintuvas. Kai kurios programos (ypač kenkėjiškos programos) paleidžiant patikrina, ar sistemoje yra derinimo priemonė, todėl šiuo atveju prasminga laikytis jau veikiančio proceso. Kartais derinama „Windows“ paslauga, kuri nustato kai kuriuos parametrus paleidimo metu, todėl norint supaprastinti derinimo procesą, taip pat geriau prisijungti prie veikiančio proceso, o ne paleisti paslaugą naudojant derinimo priemonę. Kai kurie žmonės teigia, kad proceso vykdymas per derinimo priemonę turi rimtos įtakos našumui. Trumpai tariant, išbandykite abu ir išsirinkite tai, kas jums labiausiai tinka. Jei dėl kokių nors priežasčių jums labiau patinka konkretus metodas, pasidalykite savo mintimis komentaruose!

Proceso pradžia

Jei derinate atskirą programą, kuri veikia vietoje ir nėra prijungta prie tinklo, galbūt norėsite ją paleisti per WinDBG. Tačiau tai nereiškia, kad negalite prisijungti prie jau vykdomo proceso. Pasirinkite jums patogiausią būdą.

Pradėti procesą nėra sunku. Eikite į „File:Open Executable“ ir pasirinkite vykdomąjį failą, kurį norite derinti. Taip pat galite pateikti argumentus arba nustatyti pradžios katalogą:

9 pav. Vykdomojo failo pasirinkimas derinimui

Proceso prijungimas

Prisijungimas prie jau veikiančio proceso taip pat nėra sunkus. Tačiau atminkite, kad kai kuriais atvejais gali prireikti laiko, kol bus nustatytas tikslus procesas, kurį norite derinti. Pavyzdžiui, kai kurios naršyklės kiekvienam skirtukui sukuria vieną pirminį procesą ir dar kelis procesus. Taigi, atsižvelgiant į trikčių išvadą, kurią derinate, galbūt norėsite prisijungti ne prie pagrindinio proceso, o prie proceso, susieto su skirtuku.

Jei norite pridėti prie jau veikiančio proceso, eikite į „Failas: Pridėti prie proceso“ ir pasirinkite PID arba proceso pavadinimą. Atminkite, kad turite turėti atitinkamas teises, kad galėtumėte dalyvauti procese.

10 pav. Proceso, prie kurio norite prisijungti, pasirinkimas

Jei po prisijungimo programa sustabdė savo darbą, galite naudoti „Noninvaise“ režimą pažymėdami atitinkamą langelį.

Nuotolinio proceso derinimas

Kartais gali tekti derinti procesą nuotolinėje sistemoje. Būtų daug patogiau šią užduotį atlikti naudojant vietinį derintuvą, o ne naudoti virtualią mašiną ar RDP. O gal derinate LoginUI.exe procesą, kuris pasiekiamas tik tada, kai sistema užrakinta. Tokiose situacijose galite naudoti vietinę WinDBG versiją ir prisijungti prie procesų nuotoliniu būdu. Norėdami išspręsti šias problemas, yra du dažniausiai naudojami būdai.

Esamos derinimo sesijos

Jei jau pradėjote derinti programą vietoje (pridedant arba paleisdami procesą per WinDBG), galite įvesti konkrečią komandą ir WinDBG pradės „klausytoją“ (klausytoją), prie kurio gali prisijungti nuotolinis derintuvas. Norėdami tai padaryti, naudokite komandą .server:

Serveris tcp:port=5005

Paleidę aukščiau pateiktą komandą, galite pamatyti tokį įspėjimą:

11 pav. Įspėjamasis pranešimas, kuris gali pasirodyti paleidus komandą sukurti „klausytoją“

Tada WinDBG praneš, kad serveris veikia:

0:005> .serveris tcp:port=5005
0: -remote tcp:Port=5005,Serveris=USER-PC

Dabar galite prisijungti iš nuotolinio pagrindinio kompiuterio prie jau esamos derinimo sesijos, eidami į „Failas:Prisijungimas prie nuotolinio seanso“ ir įvesdami kažką panašaus į teksto lauką: tcp:Port=5005,Server=192.168.127.138

12 pav. Nuotolinis ryšysį derinimo sesiją

Prisijungę gausite patvirtinimą nuotoliniame kliente:


serveris paleistas. Klientas gali prisijungti prie bet kurios iš šių komandų eilučių
0: -remote tcp:Port=5005,Serveris=USER-PC
MACHINENAME\User (tcp 192.168.127.138:13334) prisijungė 2013 m. gruodžio 16 d., pirmadienį, 09:03:03

ir žinute vietinė versija derintuvas:

MACHINENAME\User (tcp 192.168.127.138:13334) prisijungė 2013 m. gruodžio 16 d., pirmadienį, 09:03:03

Sukurkite nuotolinį serverį

Taip pat galite kurti atskiras serveris naudodami WinDBG, prisijunkite prie jo nuotoliniu būdu ir pasirinkite derinimo procesą. Tai galima padaryti naudojant dbgsrv.exe failą, kuriame planuojate derinti procesus. Norėdami paleisti tokį serverį, paleiskite šią komandą:

dbgsrv.exe -t tcp:port=5005

13 pav. Nuotolinio serverio paleidimas

Ir vėl galite gauti saugos įspėjimą, su kuriuo turėtumėte sutikti:

14 pav. Saugos pranešimas, kuris gali pasirodyti paleidžiant derinimo serverį

Galite prisijungti prie derinimo serverio, jei atidarote failą "Failas: Prisijunkite prie nuotolinio stuburo" ir teksto lauke įveskite šią eilutę: tcp:Port=5005,Serveris=192.168.127.138

15 pav. Prisijungimas prie derinimo serverio

Prisijungę negausite jokių signalų, kad prisijungėte, bet nuėję į „Failas:Prijungti prie proceso“, pamatysite derinimo serverio procesų sąrašą (kur veikia dbgsrv.exe). Dabar galite įsitraukti į procesą taip, lyg tai darytumėte vietoje.

Pagalbos sistema

„WinDBG“ pagalbos sistema yra puiki. Be to, kad išmoksite ko nors naujo, turėtumėte turėti galimybę gauti pagalbos informacijos apie komandą. Norėdami pasiekti WinDBG žinyną, naudokite komandą .hh:

Taip pat galite gauti pagalbos informacijos apie konkrečią komandą. Pavyzdžiui, norėdami gauti pagalbos dėl komandos .reload, naudokite šią komandą:

windbg> .hh .reload

Arba tiesiog eikite į skyrių „Pagalba: Turinys“.

Moduliai

Programai veikiant yra importuojami įvairūs moduliai, užtikrinantys programos funkcionalumą. Todėl, jei žinote, kuriuos modulius importuoja programa, galite geriau suprasti, kaip ji veikia. Daugeliu atvejų derinsite konkretų programos įkeltą modulį, o ne patį vykdomąjį failą.

Prisijungus prie proceso, WinDBG automatiškai parodys įkeltus modulius. Pavyzdžiui, žemiau yra moduliai po to, kai prisijungiau prie calc.exe:

Microsoft (R) Windows Debugger 6.12.0002.633 X86 versija
Autorių teisės (c) „Microsoft Corporation“. Visos teisės saugomos.

*** Palaukite su laukiančiu priedu
Simbolių paieškos kelias yra: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
Vykdomas paieškos kelias yra:
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

Vėliau derinimo procese šį sąrašą galite vėl rodyti naudodami komandą lmf:

0:005>lmf
pradžios pabaigos modulio pavadinimas
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 VERSIJA 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

Taip pat galite sužinoti konkretaus modulio atsisiuntimo adresą naudodami komandą „lmf m“:

0:005> lmf m branduolys32
pradžios pabaigos modulio pavadinimas
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll

Taip pat galite gauti informacijos apie konkretaus modulio vaizdo antraštę naudodami plėtinį !dh ( Šauktukas nurodo pratęsimą):

0:005> !dh branduolys32

Failo tipas:DLL
FAILOS ANTRAŠTĖS VERTĖS
14C mašina (i386)
4 sekcijų skaičius
4A5BDAAD laiko datos antspaudas 2009 m. liepos 13 d. pirmadienis 21:09:01

0 failo žymeklis į simbolių lentelę
0 simbolių skaičius
E0 dydžio pasirenkama antraštė
2102 charakteristikos
Vykdomas
32 bitų žodžių mašina
DLL

PASIRENKAMOS ANTRAŠTĖS VERTĖS
10B magija#
9.00 linker versija
C4600 dydžio kodas
C800 inicijuotų duomenų dydis
0 neinicijuotų duomenų dydis
510C5 įėjimo taško adresas
1000 bazinis kodas
----- naujas -----
77550000 vaizdų bazė
1000 sekcijų išlyginimas
200 failų lygiavimas
3 posistemis („Windows CUI“)
6.01 operacinės sistemos versija
6.01 vaizdo versija
6.01 posistemio versija
D4000 dydžio vaizdas
800 dydžio antraštės
D5597 kontrolinė suma
00040000 kamino rezervo dydis
00001000 krūvos įsipareigojimo dydis
00100000 krūvos rezervo dydis
00001000 krūvos įsipareigojimo dydis
140 DLL charakteristikos
dinamiška bazė
Suderinamas su NX
B4DA8 [A915] eksporto katalogo adresas
BF6C0 [ 1F4] importo katalogo adresas
C7000 [ 520] išteklių katalogo adresas
0 [0] Išimčių katalogo adresas
0 [ 0] saugos katalogo adresas
C8000 [B098] bazinio perkėlimo katalogo adresas
C5460 [ 38] Derinimo katalogo adresas
0 [0] Aprašų katalogo adresas
0 [0] Specialiojo žinyno adresas
0 [0] gijų saugojimo katalogo adresas
816B8 [ 40] įkelti konfigūracijos katalogą
278 [ 408] „Bound Import Directory“ adresas
1000 [DE8] importo adresų lentelės katalogo adresas
0 [0] Delay Import Directory adresas
0 [ 0] COR20 antraštės katalogo adresas
0 [0] Rezervuoto katalogo adresas

SKYRIUS ANTRAŠTĖ Nr. 1
.teksto pavadinimas
C44C1 virtualus dydis
1000 virtualių adresų
C4600 neapdorotų duomenų dydis
800 failo žymeklis į neapdorotus duomenis

0 perkėlimų skaičius
0 eilučių numerių skaičius
60000020 vėliavėlių
Kodas
(lygiavimas nenurodytas)
Vykdykite Skaityti

Derinimo katalogai (2)
Įveskite dydžio adreso žymeklį
cv 25 c549c c4c9c Formatas: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

SKYRIUS ANTRAŠTĖ Nr. 2
.duomenų pavadinimas
FEC virtualus dydis
C6000 virtualus adresas
E00 neapdorotų duomenų dydis
C4E00 failo žymeklis į neapdorotus duomenis
0 failo žymeklis į perkėlimo lentelę
0 failo žymeklis į eilučių numerius
0 perkėlimų skaičius
0 eilučių numerių skaičius
C0000040 vėliavėlės
inicijuoti duomenys
(lygiavimas nenurodytas)
Skaityk rašyk

SKYRIUS ANTRAŠTĖ Nr. 3
.rsrc pavadinimas
520 virtualus dydis
C7000 virtualus adresas
600 neapdorotų duomenų dydis
C5C00 failo žymeklis į neapdorotus duomenis
0 failo žymeklis į perkėlimo lentelę
0 failo žymeklis į eilučių numerius
0 perkėlimų skaičius
0 eilučių numerių skaičius
40000040 vėliavėlių
inicijuoti duomenys
(lygiavimas nenurodytas)
Tik skaitymui

SKYRIUS ANTRAŠTĖ Nr. 4
.pervardyti
B098 virtualus dydis
C8000 virtualus adresas
B200 neapdorotų duomenų dydis
C6200 failo žymeklis į neapdorotus duomenis
0 failo žymeklis į perkėlimo lentelę
0 failo žymeklis į eilučių numerius
0 perkėlimų skaičius
0 eilučių numerių skaičius
42000040 vėliavėlių
inicijuoti duomenys
Išmesti
(lygiavimas nenurodytas)
Tik skaitymui

Pranešimai ir išimtys

Pridėjus prie proceso, pirmiausia rodomas modulių sąrašas, o tada gali būti rodomi kiti pranešimai. Pavyzdžiui, kai prisijungiame prie calc.exe, WinDBG automatiškai nustato pertraukos tašką (tai yra tik žymeklis, naudojamas programai sustabdyti). Ekrane rodoma lūžio taško informacija:

(da8.b44): pertraukos nurodymo išimtis – kodas 80000003 (pirmas šansas)

Šis konkretus pranešimas yra išimtis, būtent pirmos galimybės išimtis. Iš esmės išimtis yra speciali sąlyga, atsirandanti vykdant programą. Pirmos galimybės išimtis reiškia, kad programa sustojo iškart po išimties atsiradimo. Antros galimybės išimtis reiškia, kad įvykus išimtis bus atliekamos kai kurios operacijos, o tada programa nustos veikti.

Registrai

Parodžius pranešimus ir išimtis, derinimo priemonė išveda procesoriaus registrų būseną. Registrai yra specialūs procesoriaus kintamieji, kuriuose saugoma nedidelė informacija arba stebima kažko būsena atmintyje. Procesorius gali labai greitai apdoroti šiuose registruose esančią informaciją. Tai daug greičiau, nei kiekvieną kartą gauti informaciją apie magistralę iš RAM.

Prisijungus prie calc.exe, WinDBG automatiškai rodo informaciją apie šiuos registrus:

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

Vėliau šią informaciją galėsite pakartoti naudodami komandą 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 cc tarpinis 3

Jei norime gauti tam tikro registro vertę, galime vykdyti šią komandą:

0:005> r eax
eax=7ffd9000

Informaciją vienu metu galima gauti iš kelių registrų taip:

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

Rodyklė į instrukciją

Paskutinė komanda yra apie vykdymo instrukcijas. Čia taip pat rodoma informacija apie tai, kas yra EIP registre, kaip ir komandos r atveju. EIP yra registras, kuriame yra vieta sekanti instrukcija kurį turi atlikti procesorius. Tai, ką rodo WinDBG, yra komandos u eip L1 atitikmuo, po kurios WinDBG eina EIP registre nurodytu adresu, konvertuoja šią sekciją į surinkimo kodą ir parodo jį ekrane.

ntdll!DbgBreakPoint:
77663540 cc tarpinis 3

palaikyti ryšį

Tolesniuose straipsniuose apžvelgsime, kaip naudoti „WinDBG“ kovoje: lūžio taškai, laipsniškas derinimas ir peržiūros atmintis. Nepersijunk! J.