Как работи дебъгерът на ядрото на операционната система. Как работи програмата за отстраняване на грешки. Време за изпълнение на режим на отстраняване на грешки на ядрото на Windows 7

Въведение

1. Видове дебъгери на Windows

2. Дебъгери в потребителски режим

3. Дебъгери в режим на ядрото

3.1 Дебъгер WDEB386

3.2 Дебъгер I386KD

3.3 Win DBG Debugger

3.4 SoftICE Debugger

4. Общ въпросотстраняване на грешки

5. Автоматичен стартприложения в програмата за отстраняване на грешки

5.1 Клавишни комбинации за прекъсване

Заключение

Литература

Въведение

Да научите как работят софтуерните инструменти е най-трудната част от процеса на отстраняване на грешки. Само чрез разбиране на възможностите и ограниченията на инструментите можете да извлечете повече от тях и да отделите по-малко време за отстраняване на грешки. Като цяло дебъгерите са изключително полезни, но могат да доведат до доста фини проблеми, които да отведат програмиста в задънена улица. Тази глава показва какво е дебъгер и как различните дебъгери работят на операционни системи Win32 (32-битовите Windows операционни системи на Microsoft).

В същото време ще се съсредоточим върху онези специални свойства на дебъгерите като цяло, които са активирани, когато някакъв софтуерен процес се изпълнява под контрола на последния. Той също така обяснява как можете да подобрите определени функции на 32-битовите операционни системи Windows, за да улесните отстраняването на грешки. Ще бъдат представени два патентовани програми за отстраняване на грешки, чийто изходен код може да бъде намерен на придружаващия CD. Първият (MinDBG) има достатъчно възможности, за да се нарече дебъгер. Вторият (WDBG) е примерен дебъгер Microsoft Windows, който прави почти всичко, което прави истински системен дебъгер, включително манипулиране на таблици със символи, обработка на точки на прекъсване, генериране на код за разглобяване и координиране с графичния потребителски интерфейс (GUI). Когато обсъждаме WDBG, ще покажем как работят точките на прекъсване и ще обсъдим какво представляват точките на прекъсване. различни файловесимволни файлове.

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

Дебъгер (debugger, англ. debugger от bug) - компютърна програма, предназначен да намира грешки в други програми, ядра на операционна система, SQL заявки и други видове код. Дебъгерът ви позволява да проследявате, наблюдавате, задавате или променяте стойности на променливи, докато кодът се изпълнява, да задавате и премахвате точки на прекъсване или условия за спиране и др.

Повечето разработчици са по-запознати с дебъгерите в потребителски режим. Не е изненадващо, че дебъгерите на този режим са предназначени за отстраняване на грешки в приложения в потребителски режим. Основен пример за дебъгер в потребителски режим е дебъгерът Microsoft Visual C++. Дебъгерите в режим на ядрото, както подсказва името им, са дебъгери, които ви позволяват да дебъгвате ядрото операционна система. Те се използват предимно от тези, които пишат (и дебъгват, разбира се) драйвери на устройства.

2. Дебъгери в потребителски режим

Дебъгерите за потребителски режим са предназначени за отстраняване на грешки на всяко приложение, работещо в потребителски режим, включително всякакви GUI програми, както и някои не толкова редовни приложения, подобно на услугите на Windows 2000, като цяло дебъгерите от този тип поддържат графичен потребителски интерфейс (GUI1). Основен знактакива дебъгери - те използват интерфейса за програмиране на приложения за отстраняване на грешки Win32 (debug API). Тъй като операционната система маркира подчинен дебъгер като "работещ в специален режим", можете да използвате функцията IsDebuggerPresent API, за да разберете дали вашият процес работи под дебъгер.

Когато предоставяте API за отстраняване на грешки на Win32, се подразбира следната конвенция: след като даден процес се изпълнява под API за отстраняване на грешки (и по този начин го прави подчинен процес), главният дебъгер не може да се отдели от този процес. Тази симбиотична връзка означава, че ако главният дебъгер излезе, подчиненият дебъгер също излиза. Главният дебъгер е ограничен до дебъгване само на подчинения дебъгер и всички процеси, които създава (ако главният дебъгер поддържа дъщерни процеси).

GUI - Графичен потребителски интерфейс. - пер.

За интерпретирани езици и системи по време на изпълнение, които използват виртуална машина, пълната среда за отстраняване на грешки се предоставя от самите виртуални машини и те не използват Win32 API за отстраняване на грешки. Някои примери за тези типове среди са: Java виртуални машини (JVM) от Microsoft или Sun, среда за скриптове за уеб приложения от Microsoft и интерпретатор на p-код в система на Microsoft. Visual Basic.

операционна система на ядрото за отстраняване на грешки

Ще стигнем до отстраняване на грешки във Visual Basic в глава 7, но имайте предвид, че p-код интерфейсът на Visual Basic не е документиран. Няма да се задълбочаваме в Java и интерфейсите за отстраняване на грешки; тези теми са извън обхвата на тази книга. За повече информация относно отстраняване на грешки и профилиране на Microsoft JVM, вижте Отстраняване на грешки и профилиране на Java приложения в MSDN. Наборът от такива интерфейси е много богат и разнообразен и ви позволява напълно да контролирате работата на JVM. За информация относно писането на дебъгер за скрипт вижте темата на MSDN „Active Script Debugging API Objects“. Подобно на JVM, обектите за отстраняване на грешки в скриптове предоставят богат интерфейс за достъп до скриптове и документация.

Изненадващ брой програми използват Win32 API за отстраняване на грешки. Те включват: дебъгерът на Visual C++, който е разгледан подробно в глави 5 и 6; дебъгерът на Windows (WinDBG), който се обсъжда в следващия раздел (за дебъгера в режим на ядрото); програма BoundsChecker от Compuware NuMega; Платформа SDK програма HeapWalker; Platform SDK зависи от програмата; Borland Delphi и C++ Builder дебъгери, както и NT Symbolic Debugger (NTSD). Сигурен съм, че има още много.

3. Дебъгери в режим на ядрото

Дебъгерите в режим на ядрото се намират между процесора и операционната система. Това означава, че когато спрете програмата за отстраняване на грешки в режим на ядрото, операционната система също спира напълно. Лесно е да се види, че твърдото спиране на операционната система е полезно, когато работите върху таймери и проблеми с времето. Въпреки това, с изключение на един дебъгер, който ще бъде обсъден по-долу (в раздела "SoftlCE Debugger" на тази глава), не можете да дебъгвате код в потребителски режим с помощта на дебъгери в режим на ядрото.

Няма много дебъгери за режим на ядрото. Ето някои от тях: Windows 80386 Debugger (WDEB386), Kernel Debugger (1386KD), WinDBG и SoftlCE. Всеки от тези дебъгери е описан накратко в следващите раздели.

3.1 Дебъгер WDEB386

WDEB386 е дебъгер за режим на ядрото на Windows 98, разпространяван като част от SDK на платформата. Този инструмент за отстраняване на грешки е полезен само за разработчици, които пишат драйвери виртуални устройства Windows 98 (VxD). Подобно на повечето дебъгери в режим на ядрото за операционни системи Windows, дебъгерът WDEB386 изисква две машини и нулев модемен кабел, за да работи. Необходими са две машини, тъй като частта от дебъгера, която работи на целевата машина, има ограничен достъпкъм неговия хардуер, така че да изпраща своя изход и да получава команди от другата машина.

Дебъгерът WDEB386 има интересна история. Започна като вътрешен фонов инструмент за Microsoft по време на ерата на Windows 3.0. Беше трудно за използване и нямаше достатъчно поддръжка за отстраняване на грешки изходен коди други хубави свойства, с които ни разглезиха програмите за отстраняване на грешки на Visual C++ и Visual Basic.

Командите за точка (DOT) са най-важната характеристика на WDEB386. Чрез прекъсване INT 41, WDEB386 може да бъде разширен за добавяне на команди. Тази разширяемост позволява на авторите на VxD драйвери да създават персонализирани команди за отстраняване на грешки, които им дават лесен достъп до информация в техните виртуални устройства. Версията за отстраняване на грешки на Windows 98 поддържа много DOT команди, които ви позволяват да наблюдавате точното състояние на операционната система във всеки момент от процеса на отстраняване на грешки.

3.2 Дебъгер I386KD

Windows 2000 се различава от Windows 98 по това, че действителната работна част на дебъгера за режим на ядрото е частта NTOSKRNL. EXE - файл на основното операционно ядро Windows системи 2000. Този инструмент за отстраняване на грешки се предлага както в безплатна (версия), така и в тествани (отстраняване на грешки) конфигурации на операционна система. За да разрешите отстраняването на грешки в режим на ядрото, задайте опцията за зареждане /DEBUG на BOOT. INI и допълнително опцията за зареждане /DEBUGPORT, ако трябва да настроите комуникационния порт на дебъгера за режим на ядрото на стойност, различна от стандартната (COM1). I386KD работи на собствена машина и комуникира с Windows машина 2000 чрез нулев модемен кабел.

Дебъгер за режим на ядрото NTOSKRNL. EXE прави само достатъчно, за да контролира процесора, така че операционната система да може да бъде отстранена. По-голямата част от работата по отстраняване на грешки - обработка на символи, разширени точки на прекъсване и разглобяване - се извършва от страна на 1386KD. един Windows време NT 4 Device Driver Kit (DDK) документира протокола, използван в нулевия модемен кабел. Microsoft обаче вече не го документира.

Силата на 1386KD е очевидна, когато погледнете всички команди, които предлага за достъп до вътрешния Състояние на Windows 2000. Знанията за това как работят драйверите на устройства в Windows 2000 ще помогнат на програмиста да наблюдава изхода на много команди. Въпреки цялата си мощ, i386KD почти никога не се използва, защото е конзолно приложение, което е много досадно за използване за базово отстраняване на грешки.

3.3 Win DBG Debugger

WinDBG е програма за отстраняване на грешки, която идва като част от SDK на платформата. Можете също да го изтеглите от #"897008.files/image001.gif">

Фигура 1. Резултат от програмата GFLAGS. EXE

Списък 4-1. Пример за разрушаване на стек на Windows 2000

void main(void)

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

// Заделяне на памет за блок от 10 байта.

LPVOID pMem = HeapAlloc(hHeap, 0.10);

// Записване на 12 байта в 10-байтов блок (препълване на купчина).

memset (pMem, OxAC,

// Заделяне на нов блок от 20 байта.

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

// Записва 1 байт във втория блок.

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

// Освободете първия блок. Това обжалване пред HeapFree ще бъде

// задейства точка на прекъсване в кода на стека за отстраняване на грешки

// операционна система.

HeapFree(hHeap, 0, pMem);

// Освободете втория блок. Имайте предвид, че това обаждане няма

// издава съобщения за грешка

HeapFree(hHeap, 0, pMem2);

// Освободете фиктивния блок. Имайте предвид, че това обаждане няма

// издава съобщения за грешка

Ако поставите отметки в същите квадратчета като на Фиг. 4.1 и повторете изпълнението на HEAPER. EXE, ще получите следния, по-подробен изход:

PAGEHEAP: процес 0x490 създаде купчина за отстраняване на грешки 00430000

(флагове 0xl, 50, 25, 0, 0): процес 0x490 създаде купчина за отстраняване на грешки 00CF0000

(флагове Oxl, 50, 25, 0, - 0): процес 0x490 създаде купчина за отстраняване на грешки 01600000

(флагове Oxl, 50, 25, 0, 0): Открита е повреда в опашката: at 0x01606FF0size 0x0000000Asize 0x00000010at Ox01606FFA: Опит за препратка към блок, който не е разпределен

Съдържанието на списъка се обяснява с имената на флаговете, зададени от панела Глобални флагове.

Обсъждане на програмата GFLAGS. EXE, искам да отбележа един много полезна опция- Показване на зареждащи снимки. Ако поставите отметка в това поле и стартирате приложението, ще видите това, което се нарича моментна снимка на приложението, което показва къде Windows 2000 зарежда DLL файловете и как започва да организира импортирането. Ако трябва да видите какво точно прави Програма за зареждане на Windows 2000 при зареждане на приложение (особено ако има проблем с него), тогава активирането на тази опция може да бъде много полезна стъпка. За повече информация относно моментните снимки на буутлоудъра вижте колоната "Under the Hood" на Matt Pietrek в изданието от септември 1999 г. на Microsoft Systems Journal.

5. Автоматично стартиране на приложения в дебъгера

Най-трудните типове приложения за отстраняване на грешки са тези, които се стартират от друг процес. Тази категория е атакувана Windows услуги 2000 и COM сървъри извън процеса (COM сървъри извън процеса). За да принудите дебъгер да се прикачи към процес, можете да използвате функцията DebugBreak API в много случаи. В два случая обаче тази функция няма да работи. Първо, понякога не работи с услугите на Windows 2000. Ако трябва да отстраните грешки при стартиране на услуга, извикването на DebugBreak ще прикачи програмата за отстраняване на грешки, но докато стартира програмата за отстраняване на грешки, услугата може да е изтекла и Windows 2000 ще спре. то. Второ, DebugBreak няма да работи, когато трябва да отстраните грешки на COM сървър извън процеса. Ако извикате DebugBreak, манипулаторът на COM грешки ще улови изключението за точката на прекъсване и ще прекрати COM сървъра. За щастие, Windows 2000 ви позволява да посочите, че приложението трябва да стартира в дебъгера. Това свойство ви позволява да започнете отстраняването на грешки още от първата инструкция. Въпреки това, преди да активирате това свойство за услуга на Windows 2000, уверете се, че услугата е конфигурирана да комуникира с работника. Windows маса 2000.

Свойството Run with Debugger може да бъде активирано по два начина. Най-лесният е да стартирате помощната програма GFLAGS. EXE и изберете бутона за избор ИзображениеФайл Опции(виж Фиг. 4.1). След като въведете в полето за редактиране I магьосникФайлИмеквадратче за отметка име на двоичен файл на програма Дебъгерв групата Изображение ДебъгерОпции) и въведете пълния път до дебъгера в полето за редактиране до това квадратче за отметка.

повече по трудния начин: Трябва ръчно да зададете необходимите параметри в съответните раздели на системния регистър (с помощта на редактора RegEdit). Under_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NTXCurrent Version\Image Tile Execution Options

създайте подключ, чието име е същото като името на файла на вашето приложение. Например, ако името на приложението е FOO. EXE, тогава името на подключа на системния регистър също е FOO. EXE. В този подключ създайте нов низов параметър с име Debugger. В диалоговия прозорец Промяна низов параметърВъведете пълното (включително пътя на директорията) име на файла на дебъгера по ваш избор, като използвате клавиатурата. Ако сте посочили GFLAGS. EXE и задайте някои глобални опции, ще забележите стойността на низ GiobaiFiag в ключа на вашето приложение.

Сега, когато стартирате вашето приложение, дебъгерът автоматично се зарежда и стартира. Опции команден редза дебъгер може също да се посочи в параметъра на низа на Debugger (след името на програмата за дебъгер). Например, за да използвате дебъгера WinDBG и автоматично да инициирате отстраняване на грешки веднага щом WinDBG стартира, трябва да въведете стойността d: \platform sdk\bin\windbg в диалоговия прозорец за промяна на параметъра на низа на дебъгера. exe-g.

5.1 Преки пътища за прекъсване

Понякога трябва бързо да влезете в програмата за отстраняване на грешки. Ако дебъгвате конзолни приложения, тогава натискания на клавиши +или +ще хвърли специално изключение (на име DBG_CONTROL_C). Това изключение ще ви отведе направо до програмата за отстраняване на грешки и ще ви позволи да започнете отстраняване на грешки.

Полезна функция както на Windows 2000, така и на Windows NT 4 е възможността за превключване към дебъгера по всяко време, също и в GUI приложения. Когато работите под дебъгера, натискате клавиша води (по подразбиране) до извикване на функцията DebugBreak. Интересният аспект на работата с този ключ е, че дори ако го използвате като ускорител или по друг начин обработвате съобщения от клавиатурата за този ключ, той пак ще ви свърже с дебъгера.

В Windows NT 4 клавиш за бърз достъппрекъсва зададени по подразбиране, но в Windows 2000 можете да определите кой ключ да използвате за тези цели. Защо в раздела на регистъра

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug

Задайте параметъра userDebuggerHotKey на кода на ключа (VK_*). Например, за да използвате ключа За да се свържете с дебъгера, трябва да зададете стойността на UserDebuggerHotKey на 0x91. Промените влизат в сила след рестартиране на компютъра.

Заключение

Разгледахме основните характеристики на отстраняването на грешки, неговите видове и типове, общия проблем с отстраняването на грешки, както и грешките и как да ги открием.

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


Литература

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

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

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

4. Костюхин К. - ОТСТРАНЯВАНЕ НА ГРЕШКИ В СИСТЕМИ В РЕАЛНО ВРЕМЕ. Преглед

Терминът "дебъгване на ядрото" означава изследване на вътрешната структура на данните на ядрото и/или проследяване стъпка по стъпка на функциите в ядрото. Това отстраняване на грешки е много полезен начин за изследване на вътрешния Windows устройства, тъй като ви позволява да показвате вътрешна системна информация, която не е достъпна с други средства, и дава ясна картина на напредъка на кода в ядрото.

Преди да обмислите различни начиниотстраняване на грешки в ядрото, нека разгледаме набора от файлове, които ще са необходими за извършване на всякакъв вид такова отстраняване на грешки.

Символи за отстраняване на грешки в ядрото

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

Да използвате всеки инструмент за отстраняване на грешки в режим на ядрото за изследователски цели вътрешно устройствоСтруктури от данни на ядрото на Windows (списък с процеси, блокове на нишки, списък със заредени драйвери, информация за използването на паметта и т.н.), от които се нуждаете правилни файловесимволи и най-малко символния файл за двоичния образ на ядрото - Ntoskrnl.exe. Файловете със символна таблица трябва да съответстват на версията на двоичното изображение, от което са извлечени. Например, ако е инсталиран Windows пакетСервизен пакет или някакъв вид корекция, която актуализира ядрото, трябва съответно да актуализирате символните файлове.

Изтеглете и инсталирайте символи за различни версии Windows не е труден, но актуализирането на символи за корекции не винаги е възможно. Най-лесният начин да получите необходимата версия на символи за отстраняване на грешки е да се свържете със символния сървър на Microsoft, специално създаден за тази цел, като използвате специалния синтаксис за пътя на символа, посочен в програмата за отстраняване на грешки. Например следният път на символ кара инструментите за отстраняване на грешки да изтеглят символите от онлайн сървър на символи и да съхраняват локално копие в c:\symbols:srv*c:\symbols*http://msdl.microsoft.com/download/ символи

Подробни инструкции за използване на символния сървър могат да бъдат намерени в помощния файл на инструментите за отстраняване на грешки или онлайн на http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx.

chPF OELPFPTSCHE KHLBBOYS RP TBVPFE U PFMBDLPK SDTB U BCHBTYKOSCHNY DBNRBNY RBNSFY. lBL RTBCHYMP, CHBN OHTSOP VKDEF ЪBDBFSH PDOP YЪ KHUFTPKUFCH RPDLBYULY, RETEYUYUMEOOSCHI CH ZHBKME /etc/fstab . uvtpu pvtbpch RBNSFY ЗА KHUFTPKUFCHB, OE SCHMSAEYEUS KHUFTPKUFCHBNY RPDLBYULY, OBRTYNET, MEOFSHCH, CH DBOOSCHK NPNEOF OE RPDDETSYCHBAFUS.

Забележка: yURPMSHHKFE LPNBODH дъмпон (8) DMS KHLBBOYS SDTH NEUFB, ZDE OHTsOP UPITBOSFSH BCHBTYKOSH DBNRSHCH. rPUME OBUFTPKLY RP LPNBODE суапон (8) TBDEMB RPDLBYULY DPMTSOB VSHFSH CHSHCHBOB RTPZTBNNNB dumpon . pVSHYUOP LFP CHSHRPMOSEPHUS ЪBDBOYEN RETENOOOPK dumpdev CH ZHBKME rc.conf (5). еUMY ЪБДБОБ ьФБ RЭТЭНООБС, Ф РПУМЭ УВПС RTY RETCHPK NOPZPRPMSHЪPCHBFEMSHULPK RETEЪBZTHЪLE VHDEF BCHFPNBFYUEULY ЪBRHEEOOB RTPZTBNNNB savecore (8). pOB UPITBOIF BCHBTYKOSHCHK DBNR SDTB CH LBFBMPZ, ЪBDBOOSCHK CH RETENEOOOPK dumpdir ZHBKMB rc.conf . rP KHNPMYUBOYA LBFBMPZPN DMS BCHBTYKOSCHI DBNRPCH SCHMSEFUS /var/crash .

mYVP CHSC NPTSEFE ЪBDBFSH KHUFTPKUFCHP DMS UVTPUB PVTBB RBNSFY SCHOP YUETE RBTBNEFT dump CH UFTPLE config LPOZHYZHTBGYPOOPZP ZHBKMB CHBYEZP SDTB. fBLPK URPUPV YURPMSHЪPCHBFSH OE TELPNEODHEFUS Y PO DPMTSEO YURPMSHЪPCHBFSHUS, FPMSHLP EUMY CHSCH IPFYFE RPMKHYUBFSH BCHBTYKOSHCHE PVTBSCH RBNSFY SDTB, LPFPTPE BCHBTYKOP ЪBCHETYBEF UCHPA TBVPFH RTY ЪBZTHЪLE.

Забележка: dBMEE FETNYO gdb PYOBYUBEF PFMBDYUYL gdb , ЪBRHEEOOSCHK CH ``TETSINE PFMBDLY SDTB”. RETEIPD CH LFPF TETSYN DPUFYZBEFUS ЪBRHULPN gdb U RBTBNEFTPN -k . h TETSYNE PFMBDLY SDTB gdb YЪNEOSEF UCHPЈ RTYZMBYEOYE ЗА (kgdb) .

Съвет: eUMY CHSH YURPMSH'HEFE FreeBSD CHETUYY 3 YMY VPMEE TBOOAA, CHCH DPMTSOSCH CHSHRPMOYFSH HUEYEOYE PFMBDPUOPZP SDTB LPNBODPK лента, B OE KHUFBOBCHMYCHBFSH VPMSHYPE PFMBDPUOPE SDTP:

# cp kernel kernel.debug # strip -g ядро

bFPF YBZ OE FBL KhTS Y OEPVIPDYN, OP TELPNEODKHEN. (PH FreeBSD 4th VPMEE TEMYYBI LFPF YBZ CHSHRPMOSEFUS BCHFPNBFYUEULY CH LPOGE RTPGEUUB RPUFTPEOOYS SDTB make .) lPZDB SDTP HUEYEOP, BCHFPNBFYUEULY YMY RT Y RPNPEY LPNBOD CHCHYE, CHCH NPTSEFE KHUFBOPCHYFSH EZP P VSHCHYUOSCHN PVTBBPN, OVTTBCH направи инсталиране.

ъBNEFSHFE, YuFP CH UFBTSHCHETUISI FreeBSD (DP 3.1, OE CHLMAYUBS LFPF TEMY), YURPMSHHEFUS SDTB CH ZHTNBFE a.out, RPFPNH YI FBVMYGSCH UINCHPMPCH DPMTSOSCH TBURPMBZBFShu S RPUFPSOOP CH RBNSFY. u VPMSHYPK FBVMYGEK UYNCHPMPCH CH OE HUEOOOOPN PFMBDPUOPN SDTE LFP YЪMYYOSS FTBFB. rPUMEDOYE TEMYYSH FreeBSD YURPMSHHAF SDTB CH ZHTNBFE ELF, ZHE LFP OE SCHMSEFUS RTPVMENPK.

eUMY CHSH FEUFYTHEFE OPCHPE SDTP, ULBTSEN, OBVYTBS YNS OPCHPZP SDTB CH RTYZMBYYE OYBZTHYUYLB, OP CHBN OHTSOP ЪBZTHTSBFSH Y TBVPFBFSH U DTHZYN SDTPN, SC UOPCHB CHETOHFSHUS L OPTNBMSHOPNH ZHOLGYPOYTP ЧБОЯ, ЪBZTHTSBKFE EZP FPMSHLP CH PDOPRPMSHЪPCHBFEMSHULPN TETSYNE RTY RPNPEY ZHMBZB -s , KHLBSCCHBENPZP RTY ЪBZTH ЪLE, B ЪBFEN CHSHRPMOYFE FBLYE YBZY:

# fsck -p # mount -a -t ufs # така че вашата файлова система за /var/crash може да се записва # savecore -N /kernel.paniced /var/crash # exit # ...към мулти-потребител

bFB RPUMEDPCHBFEMSHOPUFSH KHLBSCCHBEF RTPZTBNNE savecore (8)ЗА YURPMSHЪPCHBOYE DTHZPZP SDTB DMS YЪCHMEYUEOYS UYNCHPMYUEULYI YNEO. YOBYUE POB VKhDEF YURPMSHЪPCHBFSH SDTP, TBVPFBAEE CH DBOOSHK NPNEOF Y, ULPTEE CHUEZP, OYUEZP OE UDEMBEF, RPFPNH YuFP BCHBTYKOSHCHK PVTB RBNSFY YYNCHPMSCH SDTB F PFMYUBFSHUS.

b FERETSH, RPUME UVTPUB BCHBTYKOPZP DBNRB, RETEKDYFE CH LBFBMPZ /sys/compile/WHATEVER Y ЪBRKHUFYFE LPNBODH gdb -k . yЪ RTPZTBNNSH gdb UDEMBKFE CHPF SFP:

Symbol-file kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 Y CHBMS - CHCH NPTSEFE PFMBTSYCHBFSH BCHBTYKOSHK DBNR, YURPMSHЪHS YUIPDOSCH FELUFSCH SDTB FPYuOP FBLCE, LBL CHSHCH LFP D EMBEFE AT MAVPC DTHZPK RTPZTBNNPK.

ChPF TsKHTOBM LPNBOD UEBOUB TBVPFSH gdb, YMMAUFTYTHAEIK bfh RTPGEDHTH. dMYOOSCH UFTPLY VSHMY TBPTCHBOSH DMS KHMHYUYEOYS YUYFBVEMSHOPUFY Y DMS KHDPVUFCHB UFTPLY VSHCHMY RTPOKHNETPCHBOSHCH. CHUE PUFBMSHOPE SCHMSEFUS FTBUUYTPCHLPK PYYVLY, TEBMSHOP CHPOYLOKHCHYEK PE CHTENS TBVPFSCH OBD DTBKCHETPN LPOUPMY pcvt.

1: Скриптът стартира на петък, 30 декември 23:15:22 1994 г. 2: # cd /sys/compile/URIAH 3: # gdb -k kernel /var/crash/vmcore.1 4:Четене на символни данни от /usr/src/ sys/compile/URIAH/kernel ...готово. ./../i386/i386/trap.c ред 673) 73:673 грешка = (*callp->sy_call)(p, args, rval); 74: (kgdb) нагоре 75: Избран начален кадър; не можеш да се качиш. 76: (kgdb) изход 77: # изход 78: изход 79: 80: Скриптът е направен на петък, 30 декември 23:18:04 1994

lPNNEOFBTYY L CHSHCHYYERTYCHEDEOOPNH TSHOBMKH:

UFTPLB 6:

ьФП DBNR, CHSFSHCHK RTY RPNPEY DDB (UNPFTY OITSE), RPPFPNH LPNNEOFBTYK L BCHBTYKOPNH PUFBOPCHH YNEEF YNEOOP CHYD ``защото казахте!'' Y FTBUUYTPCHLB UFELB ZMHVPLB; PDOBLP YOBYUBMSHOPK RTYYUYOPK RETEIPDB CH DDB VSHMB BCHBTYKOBS PUFBOPCHLB RTY CHPOYLOPCHEOYA PYYVLY UFTBOIGSC RBNSFY.

UFTPLB 20:

lFP NEUFPOBIPTSDEOOYE ZHKHOLGYY trap() CH FTBUUYTPCHLE UFELB.

UFTPLB 36:

rTYOKHDIFEMSHOPE YURPMSHЪPCHBOIE OPChPK ZTBOYGSCH UFELB; FERTSH LFP OE OHTSOP. rTEDRPMBZBEFUS, YuFP ZTBOYGSCH UFELB KHLBSCCHBAF ЗА RTBCHYMSHOP TBURPMPTSEOYE, DBCE CH UMHUBE BCHBTYKOPZP PUFBOPCHB. ZMSDS ЗА UFTPLH YUIDOPZP LPDB 403, NPTsOP ULBBFSH, YuFP CHEUSHNB CHETPSFOP, YuFP MYVP CHYOPCHBF DPUFHR RP KHLBBFEMA ``tp"", MYVP VSHM CHSHCHIPD ЪB ZTBOYGSC NBUUYCHB.

UFTPLB 52:

rPIPTSE, YuFP CHYOPCHBF KHLBBFEMSH, OP ON SCHMSEFUS DPRKHUFYNSCHN BDTEUPN.

UFTPLB 56:

pDOBLP, PYUECHYDOP, UFP НА KHLBSCCHBEF ЗА NHUPT, FBL UFP NSCH OBYMY OBYKH PYYVLH! (DMS FEI, LFP OE OBLPN U LFPC YUBUFSHHA LPDB: tp->t_line UMHTSYF DMS ITBOEOYS TETSYNB LBOBMSB LPOUPMSHOPZP HUFTPKUFCHB, Y LFP DPMTSOP VShchFSH DPUFBFPYuOP NBMEOSHLPE GEMPE YUYUMP .)

Понякога имам ситуация, в която Windows чака време за зареждане за дебъгера на ядрото. Виждате текста „Старт на Windows“, но не и логото.

Ако прикача дебъгера сега, анимацията на логото на Windows 7 се възпроизвежда, след което логото започва да пулсира. В този момент процесът на изтегляне вече не напредва. Натоварването на процесора е намалено до минимум. Обикновено чакам няколко минути, но нищо не се случва.

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

Някакви идеи какво мога да направя, освен да стартирам ремонт при стартиране?

Благодаря предварително!

3

2 отговора

За да разрешите проблема, пред който сте изправени, просто натиснете F10 по време на зареждане. И премахване/отстраняване на грешки и свързани параметри. След това натиснете enter.

Предложение: Не използвайте /debug за опцията на менюто за зареждане по подразбиране. Копирайте конфигурацията за зареждане в нов запис. След това го задайте в режим на отстраняване на грешки. Windows не знае кога ще използвате програмата за отстраняване на грешки. Затова той трябва да изчака.

За да отстраните грешки в ядрото, трябва да се свържете с вашия компютър с помощта на нулев модемен кабелили модемна връзка. Компютърът, извършващ отстраняване на грешки, ще се нарича „Хост“, а проблемният компютър ще се нарича „Цел“.

И двата компютъра трябва да работят еднакво Windows версии, а файловете със символи за целевия компютър трябва да бъдат инсталирани на хост компютъра. Символните файлове са предоставени на инсталационния компактдиск на Windows в директорията Support\Debug.

За да разрешите отстраняването на грешки, трябва да направите промени във файла BOOT.INI на целевия компютър.

1. Променете атрибутите на файла BOOT.INI:

attrib c:\boot.ini –r –s

2. Редактирайте този файл и в реда Стартиране на Windowsдобавете параметъра /debug (за да кажете на системата да стартира в RAM паметдебъгер на ядрото зареждане на Windows). Допълнителни параметри са /Debugport, който казва на системата кой COM порттрябва да се използва (COM2 по подразбиране) и /Baudrate - за указване на скоростта на трансфер на данни (по подразбиране е 19200 бода, но е по-добре да използвате 9600). Например:


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

3. Запазете файла.

4. Задайте предишните атрибути на файла BOOT.INI:

attrib c:\boot.ini +r +s

IN в този примерцелевият компютър позволи връзката през COM2 порта при 9600 bps.

Хост компютърът трябва да бъде конфигуриран с настройките, необходими за отстраняване на грешки. Освен това трябва да бъдат инсталирани символните файлове. За да ги инсталирате, отидете в директорията \support\debug на инсталационния компактдиск и въведете следната команда:

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

Например:

expndsym f: d:\символи

Инсталирането може да отнеме известно време. Не забравяйте, че ако сервизните пакети са били инсталирани на целевия компютър, символните файлове за тези пакети също трябва да бъдат инсталирани на хост компютъра. Файловете със символи за пакети за актуализация могат да бъдат изтеглени от уебсайта на Microsoft.

Следващият етап е настройката променливи на средата, необходими за отстраняване на грешки, например променливи, указващи местоположението на символни файлове и др. Следното е описание на тези променливи.

Описание на системните променливи

Дефиницията на тези променливи може да бъде поставена в пакетен файлза да избегнете въвеждането на съответните команди при всяко зареждане:

ехото е изключено
set_nt_debug_port=com2
set_nt_debug_baud_rate=9600
задайте _nt_symbol_path=d:\symbols\i386
задайте _nt_log_file_open=d:\debug\logs\debug.log

Сега трябва да копирате софтуеротстраняване на грешки в ядрото, което се намира в директорията support\debug\<процессор>на инсталационния компактдиск (support\debug\I386). Най-лесният начин е да копирате цялата директория, тъй като тя е малка по размер (около 2,5 MB). За платформата I386 се използва дебъгер, който се доставя като файл I386KD.EXE. Дебъгерът се стартира с помощта на командата I386KD. За да въведете команда, натиснете клавишната комбинация и изчакайте да се появи командният ред kd>.

Споделете