За установяване на причините за сини екрани(BSOD) трябва да анализира дъмпа на паметта. В по-голямата част от случаите е достатъчен минидъмп, който се създава от системата в случай на критични грешки.
Тази статия съдържа стъпка по стъпка инструкцияза инсталиране и конфигуриране на WinDBG - мощен инструмент за отстраняване на грешки, който ви позволява да идентифицирате истинската причина за BSOD.

Стъпка 1 — Настройка на запис на дъмп на малка памет

Стъпка 2 — Инсталиране на WinDBG

За да анализирате дъмпове на паметта, ще трябва да инсталирате дебъгера WinDBG, който е включен в Windows SDK. Към момента на писане, последният наличен Windows версии SDK:

  • Windows 10 SDK (изтеглете онлайн инсталатора)
  • Windows 8.1 SDK (изтеглете онлайн инсталатора)

Стъпка 3 — Съпоставяне на .dmp файлове към WinDBG

Съпоставете вашите .dmp файлове с WinDBG, за да улесните четенето и анализирането на дъмпове на паметта. Това ще ви позволи да отваряте дъмп файлове от Explorer директно в WinDBG, заобикаляйки предварителното му стартиране.


Стъпка 4 — Настройване на сървъра за символи за получаване на файлове със символи за отстраняване на грешки


Инсталирането и първоначалната конфигурация на WinDBG вече е завършена. За да промените външния му вид, можете да отидете в менюто изглед- настройките на шрифта ще намерите, като изберете елемента Шрифти настройките на прозореца на конзолата в Настроики.

22 юни 2010 г

Преди Windbg беше достъпен отделно за изтегляне. Но за най-новите версии Microsoft го запазва като част от Windows SDK. Моля, намерете връзките за изтегляне по-долу.

Windows 10

Най-новата версия на Windbg за Windows 7 можете да изтеглите от линка https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

Windows 7

Изтеглете инсталационни програми от горните връзки. Имайте предвид, че това не изтегля целия SDK, това е само инсталационна програма. след като стартирате файла, можешизберете кои инструменти искате да бъдат изтеглени. Ако се интересувате само от Windbg, можете да изключите всичко останало и да изберете само „Инструменти за отстраняване на грешки“ под „Общи помощни програми“

Горният пакет инсталира версия на windbg 6.12. Ако искате бързо да инсталирате windbg, можете да изберете по-стара версия (6.11), която може да бъде изтеглена от
връзката, дадена в края на тази публикация.

След като извършите инсталацията, можете да намерите програмата в старт меню-> Всички програми -> Инструменти за отстраняване на грешки за Windows -> Windbg

Инструменти за отстраняване на грешки за Windows- Оперативни инструменти за отстраняване на грешки в кода Windows системи. Те са набор от свободно разпространявани програми от Microsoft, предназначени за отстраняване на грешки в кода на потребителския режим и режима на ядрото: приложения, драйвери, услуги, модули на ядрото. Инструментариумът включва конзолни и GUI дебъгери, помощни програми за работа със символи, файлове, процеси, помощни програми за отдалечено отстраняване на грешки. Инструментариумът съдържа помощни програми, с които можете да намерите причините за повреди в различни компоненти на системата. Инструменти за отстраняване на грешки за Windowsот определен момент не са достъпни за изтегляне под формата на самостоятелна дистрибуция и са част от Windows SDK (Windows Software Development Kit). Инструментален комплект Windows инструменти SDK от своя страна е достъпен като част от програмата за абонамент на MSDN или може да бъде изтеглен безплатно като отделна дистрибуция от msdn.microsoft.com. Според разработчиците най-новото и най-доброто сегашна версияИнструментите за отстраняване на грешки за Windows се съдържат в Windows SDK.

Инструментите за отстраняване на грешки за Windows се актуализират и предоставят на обществеността доста често и този процес не зависи от изданието по никакъв начин. операционна система. Затова периодично проверявайте за нови версии.

Нека сега да видим за какво по-специално служат инструментите за отстраняване на грешки Microsoft Windows:

  • Дебъгване на локални приложения, услуги (услуги), драйвери и ядро;
  • Отстраняване на грешки по мрежата отдалечени приложения, услуги (услуги), драйвери и ядро;
  • Отстраняване на грешки в работещи приложения в реално време;
  • Анализирайте дъмп файловете на паметта на приложенията, ядрото и системата като цяло;
  • Работа със системи, базирани на x86/x64/Itanium архитектури;
  • Отстраняване на грешки в програми в потребителски режим и режим на ядрото;

На разположение следващи версииИнструменти за отстраняване на грешки за Windows: 32-битов x86, Intel Itanium, 64-битов x64. Имаме нужда от два от тях: x86 или x64.

Има няколко начина за инсталиране на инструменти за отстраняване на грешки за Windows, в тази статия ще разгледаме само основните:

  • Инсталиране чрез уеб инсталатор.
  • Инсталиране на инструменти за отстраняване на грешки за Windows от ISO Изображение на Windows SDK.
  • Инсталиране на инструменти за отстраняване на грешки за Windows директно от пакетите dbg_amd64.msi /dbg_x86.msi.

Остава неясно в кой момент защо трябва да инсталирам инструменти за отстраняване на грешки на компютър? Често в края на краищата се сблъсквате със ситуация, в която намесата в работна средакрайно нежелателно! И още повече, тъй като инсталирането на нов продукт, тоест извършването на промени в регистъра / системните файлове, може да бъде напълно неприемливо. Примери са критично важни сървъри. Защо разработчиците не обмислят преносими версии на приложения, които не изискват инсталация?
От версия до версия процесът на инсталиране на пакета Инструменти за отстраняване на грешки за Windows претърпява някои промени. Нека сега преминем направо към инсталационния процес и да разгледаме начините, по които инструментариумът може да бъде инсталиран.

Инсталиране на инструменти за отстраняване на грешки за Windows с помощта на уеб инсталатора

Отидете на страницата Архив на Windows SDK и намерете раздел, наречен Windows 10 и под елемента „Windows 10 SDK (10586) и Microsoft Windows 10 Mobile Device Emulator (версия 10586.11)“.

Кликнете върху елемент ИНСТАЛИРАЙТЕ SDK. След като щракнете, изтеглете и стартирайте файла sdksetup.exe, който инициира процеса на онлайн инсталиране на Windows SDK. В началния етап инсталаторът ще провери дали пакетът .NET Framework е инсталиран в системата последна версия(във този моменттова е 4,5). Ако пакетът липсва, инсталацията ще бъде предложена и станцията ще се рестартира, когато приключи. Веднага след рестартирането, на етапа на оторизация на потребителя, процесът на инсталиране започва директно с Windows SDK.

Често при избора на всички компоненти на пакета без изключение могат да възникнат грешки по време на инсталационния процес. В този случай се препоръчва компонентите да се инсталират избирателно, минималният необходим набор.

След като инсталацията на инструментите за отстраняване на грешки за Windows приключи, местоположението на файловете за отстраняване на грешки, когато този методнашата инсталация ще бъде както следва:

  • 64-битови версии: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x64
  • 32-битови версии: C:\Program Files (x86)\Windows Kits\x.x\Debuggers\x86

* където x.x е конкретна версия на комплекта за разработка;
Забелязахме, че във версии 8 и по-високи пътищата за инсталиране са забележимо различни от класическите за всички предишни версииинструменти за отстраняване на грешки?

Огромен плюс този методИнсталирането на инструменти за отстраняване на грешки за Windows е да инсталирате версии на инструменти за отстраняване на грешки за всички архитектури наведнъж.

Инсталиране на инструменти за отстраняване на грешки за Windows от Windows SDK ISO

Този метод включва инсталиране на инструменти за отстраняване на грешки за Windows с помощта на пълното инсталационно изображение на Windows SDK (Комплект за разработчици на софтуер). До определено време изтеглете iso изображениеза подходящата система можете да посетите страницата Архив на Windows SDK. В момента обаче можете да получите ISO изображение на SDK, като стартирате уеб инсталатора sdksetup.exe и изберете елемента Изтеглете комплекта за разработка на софтуер за Windowsв началния прозорец на инсталатора:

Както беше установено, предишният метод на инсталиране с помощта на уеб инсталатора е доста капризен и често се проваля. На чисти системи се инсталира без проблеми, но на достатъчно натоварени системи възникват множество проблеми. Ако вашият случай е такъв, използвайте този метод.

Съответно на страницата трябва да изберете необходимия комплект за разпространение, за мен (и мисля, че за мнозина) в момента това е „Windows SDK за Windows 7 и .NET Framework 4“ и малко по-ниско щракнете върху връзката „Вземете DVD ISO изображение".

Когато работите със сайта msdn.microsoft.com, ви съветвам да използвате браузър Internet Explorer, тъй като има забелязани случаи на неработещи конкурентни продукти!

Съответно е необходимо да се избира само според нуждите. Обикновено разрядността на инструментите за отстраняване на грешки за Windows е същата като разрядността на системата. Моите тестови системи са предимно 64-битови, така че в повечето случаи изтеглям изображението за 64-битовата система GRMSDKX_EN_DVD.iso.
След това, след като изтеглим изображението, трябва по някакъв начин да работим със съществуващото ISO изображение. Традиционният начин, разбира се, е записването на компактдиск, но това е доста дълъг и понякога скъп метод. Предлагам да използвам безплатни комунални услугиза създаване на виртуални дискови устройства в системата. Лично аз предпочитам да използвам програмата DEAMON Tools Lite за тази цел. Някой може да има други предпочитания, по-директни или леки помощни програми, на вкус и цвят, както се казва .. След инсталацията DAEMON инструменти Lite, просто щраквам два пъти върху файла с изображение GRMSDKX_EN_DVD.iso и имам нов виртуален компактдиск в системата си:

След това щраквам два пъти, за да активирам автоматичното зареждане и стартирам Инсталиране на Windows SDK:

Когато дойде ред за избор на компонентите за инсталиране от списъка, ние деактивираме абсолютно всички опции, освен тези, отбелязани на екранната снимка. Това ще ни помогне да избегнем ненужни грешки сега.


Точно така, екранната снимка показва две опции: „Windows Performance Toolkit“ и „Debugging Tools for Windows“. Изберете и двете, защото Windows Performance Toolkit със сигурност ще ви бъде полезен в работата! Освен това, след като щракнете върху бутона "Напред", инсталацията продължава в нормален режим. И в края ще видите надписа "Инсталацията е завършена".
След завършване на инсталацията работните директории на комплекта инструменти за отстраняване на грешки за Windows ще бъдат както следва:

  • За x86 версия:
  • За x64 версия:

Това завършва инсталирането на инструментите за отстраняване на грешки за Windows.

Инсталиране на инструменти за отстраняване на грешки за Windows чрез .msi файл

В случай на проблеми по време на инсталирането на инструментите за отстраняване на грешки за Windows по двата предишни начина, все още имаме още един, най-надеждният и изпитан във времето, който помогна, така да се каже, повече от веднъж. Веднъж, преди интегрирането в Windows SDK, инструментите за отстраняване на грешки за Windows бяха налични като отделен .msi инсталатор, който все още може да се намери, но вече в недрата на разпространението на Windows SDK. Тъй като вече имаме под ръка ISO изображение на Windows SDK, не можем да го монтираме в системата, а просто да го отворим с помощта на добре познатия архиватор WinRAR или всеки друг продукт, който работи със съдържанието на ISO дискове.

След като отворим изображението, трябва да отидем в директорията "Настройка", намираща се в основата, и след това да изберем една от директориите:

  • За да инсталирате 64-битовата версия: \Setup\WinSDKDebuggingTools_amd64и разопаковайте файла dbg_amd64.msi от тази директория.
  • За да инсталирате 32-битовата версия: \Setup\WinSDKDebuggingTools и разархивирайте файла dbg_x86.msi от тази директория.

След завършване на инсталацията работните директории на комплекта инструменти за отстраняване на грешки за Windows ще бъдат както следва:

  • За x86 версия: C:\Program Files (x86)\Debugging Tools за Windows (x86)
  • За x64 версия: C:\Program Files\Debugging Tools за Windows (x64)

На този етап инсталирането на инструментите за отстраняване на грешки за Windows може да се счита за завършено.

Допълнителна информация

Не знам с какво е свързано, може би с моето невнимание, но след инсталиране на Debugging Tools за Windows, инсталаторът не задава пътя към директорията с дебъгера в системната променлива Path. Това налага определени ограничения върху изпълнението на различни задачи за отстраняване на грешки директно от конзолата. Следователно, при липса на път, аз самият пиша в прозореца Променливи на средатапът към инструментите за отстраняване на грешки:

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

* Във вашия случай пътищата може да се различават както поради използването на операционна система с различна битовост, така и поради използването на SDK с различна версия.

Помощните програми на пакета Инструменти за отстраняване на грешки за Windows могат да работят като преносими приложения, просто копирайте от работеща системакаталог Microsoft Windows Performance Toolkitи го използвайте като преносима версия на производствен сървър. Но не забравяйте да вземете предвид капацитета на системата !! Дори ако сте направили пълна инсталация на пакета на критична система, тогава можете да започнете работа веднага след инсталирането, не е необходимо рестартиране.

Инструменти за отстраняване на грешки за Windows

И сега, най-накрая, ето състава на инструментите за отстраняване на грешки за Windows:

Файл Предназначение
adplus.doc Документация за помощната програма ADPlus.
adplus.exe Конзолно приложение, което автоматизира работата на cdb дебъгера за създаване на дъмпове, лог файлове за един или повече процеси.
agestore.exe Помощна програма за премахване на остарели файлове от хранилището, използвано от сървъра за символи или сървъра източник.
breakin.exe Помощна програма, която ви позволява да изпращате персонализирана комбинация за прекъсване към процеси, подобно на натискане на CTRL+C.
cdb.exe Дебъгер на конзолата в потребителски режим.
convertstore.exe Помощна програма за преобразуване на знаци от 2 нива в 3 нива.
dbengprx.exe Ripiter (прокси сървър) за отдалечено отстраняване на грешки.
dbgpc.exe Помощна програма за показване на информация за състоянието на RPC повикване.
dbgsrv.exe Сървърният процес, използван за отдалечено отстраняване на грешки.
dbh.exe Помощна програма за показване на информация за съдържанието на файл със символи.
dumpchk.exe Помощна програма за проверка на дъмп. Помощна програма за бърза проверка на дъмп файл.
dumpexam.exe Помощна програма за анализиране на дъмп на паметта. Резултатът се извежда в %SystemRoot%\MEMORY.TXT.
gflags.exe Редактор на глобални системни флагове. Помощната програма управлява ключове в системния регистър и други настройки.
i386kd.exe Обвивка за к.д. Така ли се наричаше kd някога за базирани на Windows NT/2000 системи за x86 машини? Вероятно оставен поради причини за съвместимост.
ia64kd.exe Обвивка за к.д. Това ли беше това, което някога се наричаше kd за базирани на Windows NT/2000 системи за ia64 машини? Вероятно оставен поради причини за съвместимост.
kd.exe Конзолен дебъгер в режим на ядрото.
kdbgctrl.exe Инструмент за управление на отстраняване на грешки в ядрото. Помощна програма за управление и конфигуриране на връзката за отстраняване на грешки в ядрото.
kdsrv.exe Сървър за връзка за KD. Помощната програма е малко приложение, което работи и чака отдалечени връзки. kd работи на клиент и се свързва с този сървър за отдалечено отстраняване на грешки. И сървърът, и клиентът трябва да са от една и съща група инструменти за отстраняване на грешки.
kill.exe Помощна програма за приключване на процеси.
list.exe Помощна програма за показване на съдържанието на файл на екрана. Тази миниатюрна помощна програма беше включена с една цел - преглед на големи текстови или регистрационни файлове. Заема малко място в паметта, тъй като зарежда текста на части.
logger.exe Малък дебъгер, който може да работи само с един процес. Помощната програма инжектира logexts.dll в пространството на процеса, което записва всички извиквания на функции и други действия на програмата, която се изследва.
logviewer.exe Помощна програма за преглед на регистрационни файлове, написани от програмата за отстраняване на грешки logger.exe.
ntsd.exe Microsoft NT Symbolic Debugger (NTSD). Дебъгер, който е идентичен на cdb, с изключение на това, че създава текстов прозорец при стартиране. Подобно на cdb, ntsd може да отстранява грешки както в конзолни, така и в графични приложения.
pdbcopy.exe Помощна програма за премахване на частни символи от символен файл, контролиране на публични символи, включени в символен файл.
remote.exe Помощна програма за дистанционно отстраняване на грешки и дистанционно управление на всеки KD, CDB и NTSD конзолен дебъгер. Позволява ви да стартирате всички тези конзолни програми за отстраняване на грешки от разстояние.
rtlist.exe Отдалечен преглед на задачи. Помощната програма се използва за изброяване на изпълнявани процеси чрез сървърния процес DbgSrv.
symchk.exe Помощна програма за изтегляне на символи от сървъра за символи на Microsoft и създаване на локален кеш за символи.
symstore.exe Помощна програма за създаване на мрежа или локално хранилищезнаци (2 нива/3 нива). Символното хранилище е специализирана директория на диск, която е изградена според определена структура и съдържа символи. В основната директория на символите се създава структура от подпапки с имена, идентични с имената на компонентите. На свой ред всяка от тези подпапки съдържа вложени подпапки със специални имена, получени чрез хеширане на двоични файлове. Помощната програма symstore сканира папките с компоненти и добавя нови компоненти към хранилището на символи, откъдето всеки клиент може да ги извлече. Твърди се, че symstore се използва за получаване на символи от хранилището на 0 нива и поставянето им в хранилището на 2 нива/3 нива.
tlist.exe Преглед на задачи. Помощна програма за списък на всички работещи процеси.
umdh.exe Помощна програма за dump heap в потребителски режим. Помощна програма за анализиране на купища от избран процес. Позволява ви да показвате различни опции за купчината.
usbview.exe USB програма за преглед. помощна програма за преглед USB устройствасвързан към компютър.
vmdemux.exe Демултиплексор виртуална машина. Създава множество именувани канали за една COM връзка. Каналите се използват за отстраняване на грешки в различни компоненти на виртуалната машина
windbg.exe Дебъгер за потребителски режим и режим на ядрото с GUI.

Въведение в WinDBG - Част 1

Александър Антипов

WinDBG е страхотен инструмент за отстраняване на грешки. Може да няма много удобен за потребителя интерфейс и да няма черен фон по подразбиране, но е един от най-мощните и стабилни програми за отстраняване на грешки в Windows в момента. В тази статия ще ви преведа през основите на WinDBG, за да можете да започнете с него.


WinDBG е страхотен инструмент за отстраняване на грешки. Може да няма много удобен за потребителя интерфейс и да няма черен фон по подразбиране, но е един от най-мощните и стабилни програми за отстраняване на грешки в Windows в момента. В тази статия ще ви преведа през основите на WinDBG, за да можете да започнете с него.

Това е първата статия от поредица за WinDBG. Списък на всички статии, включени в тази серия:

  • Част 1 - инсталация, интерфейс, символи, отдалечено/локално отстраняване на грешки, помощна система, модули, регистри.
  • Част 2 - точки на прекъсване.
  • Част 3 - проверка на паметта, стъпка по стъпка отстраняване на грешки в програмата, съвети и трикове.

В тази статия ще разгледаме монтирането и прикачването към процес, а в следващите ще покрием точките на прекъсване, преминаването и проверката на паметта.

Инсталиране на WinDBG

В сравнение с Windows 7, процесът на инсталиране на WinDBG в Windows 8 се е променил леко. В този раздел ще разгледаме инсталирането на програмата за отстраняване на грешки и за двете операционни системи.

Инсталиране на WinDBG на Windows 8

В Windows 8 WinDBG е включен в Windows Driver Kit (WDK). Можете да инсталирате визуално студиои WDK или инсталирайте отделно пакета Инструменти за отстраняване на грешки за Windows 8.1, който включва WinDBG.

Инсталаторът ще ви попита дали искате да инсталирате WinDBG локално или да изтеглите целия пакет за разработка за друга машина. Последното по същество е еквивалентът офлайн инсталатор, което е много удобно, ако искате да инсталирате пакета на други системи в бъдеще.

Фигура 1: Избор на типа инсталация

В следващия прозорец трябва да премахнете отметката от всички елементи с изключение на „Инструменти за отстраняване на грешки за Windows“ и да кликнете върху бутона „Изтегляне“.

След като инсталаторът приключи работата си, отидете в директорията, където е изтеглен пакетът (по подразбиране е c:\Users\Username\Downloads\Windows Kits\8.1\StandaloneSDK) и преминете през инсталационната процедура.

Инсталиране на WinDBG на Windows 7 и по-стари версии

За Windows 7 и по-стари версии WinDBG е част от пакета „Инструменти за отстраняване на грешки за Windows“, който е включен в Windows SDK и .Net Framework. Ще трябва да изтеглите инсталатора и след това да изберете „Инструменти за отстраняване на грешки за Windows“ по време на инсталационния процес.

По време на инсталацията избирам опцията „Инструменти за отстраняване на грешки“ под „Пакети за повторно разпространение“, за да създам самостоятелна инсталационна програма за улесняване на следващите инсталации.

Фигура 2: Избор на опции за инсталиране за създаване на самостоятелна инсталационна програма

След завършване на инсталацията трябва да имате инсталаторите на WinDBG за различни платформи(в c:\Program Files\Microsoft SDKs\Windows\v7.1\Redist\Debugging Tools for Windows\).

Фигура 3: Папка с инсталатори на WinDBG за различни платформи

WinDBG интерфейс

Фигура 4: Външен вид на WinDBG

След като за първи път видите вида и усещането на WinDGB, ще разберете, че дебъгерът е плашещо прост. Повечето от функциите на WinDBG се научават по време на отстраняване на грешки в процеса. Вместо да губим време в описание на интерфейса, в следващите раздели ще разгледаме само най-важните точки.

Най-основното нещо, което трябва да знаете за интерфейса на дебъгера, е командният прозорец, който се състои от две области. Първата област: прозорец, в който се показва резултатът от изпълнението на команди. Втора област: малко текстово поле за въвеждане на команди.

Фигура 5: Команден прозорец на WinDBG

Символи

В повечето случаи WinDBG не изисква никакви специални настройки и работи правилно веднага след изваждането от кутията. Но едно важно нещо, което трябва да бъде променено, са символите. Символите са файлове, които се генерират заедно с изпълнимия файл по време на компилация на програма и съдържат информация за отстраняване на грешки (функции и имена на променливи). Информацията за отстраняване на грешки ви позволява да изследвате функционалността на дадено приложение, докато отстранявате грешки или разглобявате. Много компоненти на Microsoft са компилирани със символи, които се разпространяват чрез Microsoft Symbol Server. С останалите изпълними файлове всичко не е толкова розово - много рядко файловете с информация за отстраняване на грешки са в комплект с приложението. В повечето случаи компаниите ограничават достъпа до такава информация.

За да конфигурирате WinDBG да използва Microsoft Symbol Server, отидете в раздела File:Symbol File Path и задайте пътя до SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols. Разбира се, малко е странно, че звездичките се използват като разделител. След като настроите Microsoft Symbol Server, символите ще бъдат изтеглени в папката C:\Symbols.

Фигура 6: Настройка на MicrosoftСървър на символи

WinDBG автоматично ще зареди символи за двоични файлове, когато е необходимо. Можете също да добавите своя собствена папка със символи по следния начин:

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

Добавяне на символи по време на отстраняване на грешки

Ако трябва да импортирате символи по време на отстраняване на грешки, можете да го направите с .sympath (командният прозорец ще се появи, когато се включите в процеса). Например, за да добавите папката c:\SomeOtherSymbolFolder, въведете следната команда:

0:025> .sympath+ c:\SomeOtherSymbolFolder
Пътят за търсене на символ е: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols;c:\SomeOtherSymbolFolder
Пътят за търсене на разширен символ е: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\someothersymbolfolder

Добра идея е да презареждате символи след добавяне или промяна на пътища:

0:025> .презареждане
Презареждане на текущите модули
................................................................
...............................................

Проверка на заредените символи

За да видите кои модули имат заредени символи, можете да използвате командата x*!. Въпреки че WinDBG зарежда символи само според нуждите, x*! ще покаже символи, които могат да бъдат заредени. Можете да принудите символите да бъдат заредени с помощта на командата ld * (това може да отнеме известно време и можете да спрете този процес, като отидете на Debug:Break).

Сега можем да видим символите за всеки модул.

Фигура 8: Списък със символи

Отстраняване на грешки в локален процес

Когато отстранявате грешки в локален процес, имате две възможности:

  1. Закачете се вече работещ процес.
  2. Стартирайте процеса чрез WinDBG.

Всеки метод има своите предимства и недостатъци. Ако, да речем, стартирате програмата през WinDBG, тогава имате налични някои специални опции за отстраняване на грешки (например отстраняване на грешки в купчина), които могат да доведат до срив на приложението. От друга страна, има и програми, които се сриват, когато прикачите дебъгер към тях. Някои приложения (особено злонамерен софтуер) проверяват наличието на дебъгер в системата по време на стартиране и съответно в този случай има смисъл да се придържате към вече работещ процес. Понякога има отстраняване на грешки на услуга на Windows, която задава някои параметри по време на стартиране, така че за да се опрости процеса на отстраняване на грешки, също е по-добре да се закачите към работещ процес, вместо да стартирате услугата чрез програма за отстраняване на грешки. Някои хора твърдят, че изпълнението на процес през дебъгер има сериозно въздействие върху производителността. Накратко, опитайте и двете и изберете това, което ви подхожда най-добре. Ако по някаква причина предпочитате определен метод, споделете мислите си в коментарите!

Стартиране на процес

Ако отстранявате грешки в самостоятелно приложение, което работи локално и не е свързано в мрежа, може да искате да го стартирате през WinDBG. Това обаче не означава, че не можете да се свържете с вече работещ процес. Изберете най-удобния за вас начин.

Стартирането на процеса не е трудно. Отидете на „Файл: Отваряне на изпълним файл“ и изберете изпълнимия файл, който искате да отстраните. Можете също да предоставите аргументи или да зададете началната директория:

Фигура 9: Избор на изпълним файл за отстраняване на грешки

Процесна връзка

Свързването към вече работещ процес също не е трудно. Все пак, имайте предвид, че в някои случаи може да отнеме време, за да намерите точния процес, който искате да отстраните. Например, някои браузъри създават един родителски процес и след това още няколко процеса за всеки раздел. Така че, в зависимост от дъмпа за срив, който отстранявате грешки, може да искате да се свържете не към родителския процес, а към процеса, свързан с раздела.

За да прикачите към вече работещ процес, отидете на „Файл: Прикачване към процес“ и след това изберете PID или името на процеса. Не забравяйте, че трябва да имате съответните права, за да се включите в процеса.

Фигура 10: Избор на процес за свързване

Ако след свързване приложението е спряло работата си, можете да използвате режима "Noninvaise", като поставите отметка в съответното квадратче.

Отстраняване на грешки в отдалечен процес

Понякога може да се наложи да дебъгвате процес на отдалечена система. Би било много по-удобно да се справите с тази задача с локален дебъгер, вместо да използвате виртуална машина или RDP. Или може би отстранявате грешки в процеса LoginUI.exe, който е достъпен само когато системата е заключена. В ситуации като тази можете да използвате локалната версия на WinDBG и да се прикачите към процеси от разстояние. За решаването на тези проблеми има два най-често срещани метода.

Съществуващи сесии за отстраняване на грешки

Ако вече сте започнали локално отстраняване на грешки в програмата (чрез прикачване или стартиране на процес през WinDBG), тогава можете да въведете конкретна команда и WinDBG ще стартира „слушател“ (слушател), към който отдалеченият дебъгер може да се свърже. За да направите това, използвайте командата .server:

TCP на сървъра:порт=5005

След като изпълните горната команда, може да видите предупреждение като това:

Фигура 11: Предупредително съобщение, което може да се появи след изпълнение на командата за създаване на „слушател“

Тогава WinDBG ще докладва, че сървърът работи:

0:005> .server tcp:port=5005
0: -remote tcp:Port=5005,Server=USER-PC

Вече можете да се свържете от отдалечен хост към вече съществуваща сесия за отстраняване на грешки, като отидете на „Файл:Свързване към отдалечена сесия“ и въведете нещо подобно в текстовото поле: tcp:Port=5005,Server=192.168.127.138

Фигура 12: Дистанционна връзкакъм сесията за отстраняване на грешки

След свързване ще получите потвърждение на отдалечения клиент:


сървърът стартира. Клиентът може да се свърже с всеки от тези командни редове
0: -remote tcp:Port=5005,Server=USER-PC
MACHINENAME\User (tcp 192.168.127.138:13334) свързан в понеделник, 16 декември, 09:03:03, 2013 г.

и съобщение в локална версиядебъгер:

MACHINENAME\User (tcp 192.168.127.138:13334) свързан в понеделник, 16 декември, 09:03:03, 2013 г.

Създайте отдалечен сървър

Можете също да създавате отделен сървърс WinDBG, свържете се с него дистанционно и изберете процес за отстраняване на грешки. Това може да стане с помощта на файла dbgsrv.exe, където планирате да отстраните грешки в процесите. За да стартирате такъв сървър, изпълнете следната команда:

dbgsrv.exe -t tcp:port=5005

Фигура 13: Стартиране на отдалечен сървър

И отново може да получите предупреждение за сигурност, което трябва да приемете:

Фигура 14: Съобщение за сигурност, което може да се появи по време на стартиране на сървъра за отстраняване на грешки

Можете да се свържете със сървъра за отстраняване на грешки, ако отидете на файла „Файл: Свържете се с отдалечен файл“ и въведете следния ред в текстовото поле: tcp:Порт=5005,Сървър=192.168.127.138

Фигура 15: Свързване към сървъра за отстраняване на грешки

След като се свържете, няма да получавате никакви сигнали, че сте се свързали, но ако отидете на "Файл: Прикачване към процес", ще видите списък с процеси на сървър за отстраняване на грешки (където се изпълнява dbgsrv.exe). Сега можете да се включите в процеса, сякаш го правите локално.

Помощна система

Помощната система в WinDBG е страхотна. Освен да научите нещо ново, трябва да можете да получите помощна информация за дадена команда. Използвайте командата .hh за достъп до помощта на WinDBG:

Можете също да получите помощна информация за конкретна команда. Например, за да получите помощ за командата .reload, използвайте следната команда:

windbg> .hh .reload

Или просто отидете в секцията "Помощ: Съдържание".

Модули

Докато програмата работи, се импортират различни модули, които осигуряват функционалността на приложението. Следователно, ако знаете кои модули се импортират от дадено приложение, можете да разберете по-добре как работи. В много случаи ще отстранявате грешки в конкретния модул, зареден от програмата, а не в самия изпълним файл.

Веднъж свързан с процеса, WinDBG автоматично ще покаже заредените модули. Например, по-долу са модулите, след като се свързах с calc.exe:

Microsoft (R) Windows Debugger версия 6.12.0002.633 X86
Авторско право (c) Microsoft Corporation. Всички права запазени.

*** изчакайте с чакащо прикачване
Пътят за търсене на символ е: SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
Пътят за търсене на изпълним файл е:
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

По-късно в процеса на отстраняване на грешки можете да покажете този списък отново с командата lmf:

0:005>lmf
начално крайно име на модула
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 ВЕРСИЯ 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

Можете също да разберете адреса за изтегляне за конкретен модул, като използвате командата "lmf m":

0:005> lmf m kernel32
начално крайно име на модула
77550000 77624000 kernel32 C:\Windows\system32\kernel32.dll

Можете също да получите информация за заглавката на изображението на конкретен модул, като използвате разширението !dh ( Удивителен знакпоказва разширение):

0:005> !dh ядро32

Тип файл:DLL
СТОЙНОСТИ НА ЗАГЛАВНИЯ ФАЙЛ
14C машина (i386)
4 броя секции
4A5BDAAD клеймо за дата и час понеделник, 13 юли 21:09:01 2009 г.

0 файлов указател към таблица със символи
0 брой символи
E0 размер на незадължителен хедър
2102 характеристики
Изпълним файл
32 битова машина за думи
DLL

НЕЗАДЪЛЖИТЕЛНИ СТОЙНОСТИ НА ЗАГЛАВКАТА
10B магия#
Версия на линкер 9.00
Код на размера C4600
C800 размер на инициализирани данни
0 размер на неинициализирани данни
510C5 адрес на входна точка
1000 основен код
----- ново -----
77550000 база изображения
1000 подравняване на секция
200 подравняване на файлове
3 подсистема (Windows CUI)
6.01 версия на операционната система
6.01 версия на изображението
Версия на подсистемата 6.01
Изображение с размер D4000
Заглавки с размер 800
D5597 контролна сума
00040000 размер на резервния стек
00001000 размер на ангажимента на стека
00100000 размер на купчина резерв
00001000 размер на купчина ангажимент
140 DLL характеристики
динамична база
NX съвместим
B4DA8 [A915] адрес на указателя за експортиране
BF6C0 [ 1F4] адрес на импортирана директория
C7000 [ 520] адрес на директория с ресурси
0 [ 0] адрес на директория за изключения
0 [ 0] адрес на директорията за сигурност
C8000 [B098] адрес на директорията за преместване на базата
C5460 [ 38] адрес на директорията за отстраняване на грешки
0 [ 0] адрес на директорията с описания
0 [ 0] адрес на специална директория
0 [ 0] адрес на директорията за съхранение на нишки
816B8 [ 40] адрес на директорията за конфигурация на зареждане
278 [ 408] адрес на обвързаната директория за импортиране
1000 [DE8] адрес на директорията на таблицата с адреси за импортиране
0 [ 0] адрес на директорията за забавяне на импортирането
0 [ 0] адрес на заглавна директория COR20
0 [ 0] адрес на запазена директория

ЗАГЛАВКА НА РАЗДЕЛ #1
.текстово име
C44C1 виртуален размер
1000 виртуални адреса
C4600 размер на необработените данни
800 файлов указател към необработени данни

0 брой премествания
0 брой номера на редове
60000020 знамена
Код
(не е посочено подравняване)
Изпълнете Read

Директории за отстраняване на грешки (2)
Тип Размер Адрес Указател
cv 25 c549c c4c9c Формат: RSDS, guid, 2, kernel32.pdb
(10) 4 c5498 c4c98

ЗАГЛАВКА НА РАЗДЕЛ #2
.data име
FEC виртуален размер
C6000 виртуален адрес
E00 размер на необработените данни
C4E00 файлов указател към необработени данни
0 файлов указател към таблица за преместване
0 файлов указател към номера на редове
0 брой премествания
0 брой номера на редове
C0000040 знамена
инициализирани данни
(не е посочено подравняване)
Чети пиши

ЗАГЛАВКА НА РАЗДЕЛ #3
.rsrc име
520 виртуален размер
C7000 виртуален адрес
600 размер на необработените данни
C5C00 файлов указател към необработени данни
0 файлов указател към таблица за преместване
0 файлов указател към номера на редове
0 брой премествания
0 брой номера на редове
40000040 знамена
инициализирани данни
(не е посочено подравняване)
Само за четене

ЗАГЛАВКА НА РАЗДЕЛ #4
.relocname
B098 виртуален размер
C8000 виртуален адрес
B200 размер на необработените данни
C6200 файлов указател към необработени данни
0 файлов указател към таблица за преместване
0 файлов указател към номера на редове
0 брой премествания
0 брой номера на редове
42000040 знамена
инициализирани данни
Изхвърля се
(не е посочено подравняване)
Само за четене

Съобщения и изключения

След прикачване към процес първо се показва списък с модули, а след това могат да се появят други съобщения. Например, когато се закачим за calc.exe, WinDBG автоматично задава точка на прекъсване (която е само маркер, използван за спиране на приложението). Информацията за точката на прекъсване се показва на екрана:

(da8.b44): Изключение за инструкция за прекъсване - код 80000003 (първи шанс)

Това конкретно съобщение е изключение, а именно изключение при първа възможност. По същество изключение е специално условие, което възниква по време на изпълнение на програма. Изключение при първа възможност означава, че програмата е спряла веднага след възникването на изключението. Изключение при втори шанс означава, че след възникване на изключението ще бъдат извършени някои операции и след това програмата ще спре работата си.

Регистри

След показване на съобщения и изключения, дебъгерът извежда състоянието на регистрите на процесора. Регистрите са специални променливи в процесора, които съхраняват малки части от информация или следят състоянието на нещо в паметта. Процесорът може да обработва информацията в тези регистри много бързо. Това е много по-бързо от получаването на информация по шината от RAM всеки път.

След свързване с calc.exe WinDBG автоматично показва информация за следните регистри:

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

По-късно можете да дублирате тази информация отново с помощта на командата 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 int 3

Ако искаме да получим стойността на определен регистър, можем да изпълним следната команда:

0:005> r ax
eax=7ffd9000

Информацията може да бъде получена едновременно от няколко регистъра, както следва:

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

Указател към инструкция

Последната команда е за инструкции за изпълнение. Тук също се показва информация, както в случая с командата r, за това какво съдържа EIP регистъра. EIP е регистър, съдържащ местоположението следваща инструкцияда се изпълняват от процесора. Това, което WinDBG показва, е еквивалентът на командата u eip L1, след което WinDBG отива на адреса, посочен в EIP регистъра, преобразува този раздел в асемблен код и го показва на екрана.

ntdll!DbgBreakPoint:
77663540 cc int 3

поддържате връзка

В следващите статии ще разгледаме как да използваме WinDBG в битка: точки на прекъсване, стъпково отстраняване на грешки и преглед на паметта. Не превключвайте! Дж.