ПредишенСледващото

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

Всички тези операции (Step Into, Step Over и излезте) работи с еднократна точки на прекъсване, които, както си спомняте от предишните части, са точки на прекъсване, Debugger зауствани след като те са активирани. При обсъждането на тази точка от менюто Debug Break (Виж по-горе.) Се счита за един случай, в който дебъгер използва за еднократна точки на прекъсване, за да се спре лечението.

Операция Step Into работи по различен начин, в зависимост от това дали, на какво равнище се извършва отстраняване на грешки: източник или демонтаж ниво. Докато отстраняване на грешки на ниво дебъгер източник трябва да разчита на еднократна точка на прекъсване, защото езикът на високо равнище е преведен на поредица от един или повече линии на асемблер. Когато процесора превключва в режим на крачка ще бъде преминаване през отделните машинни инструкции, а не линии на изходния код.

Преглед на изходния код (представяне като източник линии) и изглед демонтаж (представяне като Disassembler кодове Демонтаж прозорец). - Ed.

Операции за преработка, се оттегли в, прекрачи и излезте изглежда доста просто, но има една особеност, която трябва да се разглежда. Какво става, ако (в дебъгер, който се създава за управлението на тези операции) вече са инсталирани еднократни точки на прекъсване за тези операции, както и редовен прекъсване се задейства преди тях? Как да трасира разработчик, имате две възможности. Първият - да се остави само една точка един изстрел прекъсване (че само те са работили добре). Друга възможност - да се премахне един изстрел точка на прекъсване, дебъгер ви уведомява, че е работил редовно прекъсване. Debugger Visual C ++ използва най-новите възможност.

Интересен дизайн въпрос WDBG

Като цяло, аз имах малко проблеми в WDBG на развитие. Въпреки това, че е време да обсъдим един, по мое мнение, доста интересен проблем. Когато работите с Visual C ++ Output прозореца на дебъгера показва пълния път до заредени софтуерни модули. Както се изисква WDBG осигури максимална набор от функции, тя дублира функцията дебъгер Visual C ++. Но това не беше лесно.

Следната дефиниция LOAD_DLL_DEBUG_INFO структура (той е предаден на дебъгер при получаване на уведомление LOAD_DLL_DEBUG_EVENT) се състои поле ipimageName. които, по всяка вероятност, трябва да се запази името на елемент за емисия. Това е вярно, но нито една от операционните системи Win32 никога правилно изпълва в тази област, ако се чете в програмата.

typedef структура _LOAD_DLL_DEBUG_INFO

Тъй като подготовката на предизвестие LOAD_DLL_DEBUG_EVENT. Образно казано, модулът е заредена в DBGHELP.DLL на машината характер. стори ми се, че след като един модул се зарежда (в паметта), можете лесно да намерите пълното му име. API-функция SymGetModuieinfo получава (чрез съответния параметър) структурата, показана по-долу IMAGEHLP_MODULE. там, където има място за пълното име на модула (вж. поле ModuleName [32]).

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

typedef структура _IMAGEHLP_MODULE

Странното е, че когато функция SymGetModuieinfo връща информацията за символ на модула, той вместо името или името на герой се връща DBG-файл, или нищо не се върна (т.е. името на модула в върнатата информация е напълно пренебрегва ..). Такова поведение може да изглежда изненадващо, но само на пръв поглед. Когато се получава • LOAD_DLL_DEBUG_INFO структура. през първия мандат (тип hFile) е правилно, а след това функция SymLoadModuie се нарича с дръжка от същия тип (hFile). Тъй като никога не сте изтеглили характер машина DBGHELP.DLL име пълен файл, той просто взирайки се в отворен файл ЕВРОВОК определен hFile. Тя е в информацията за отстраняване на грешки, и да го чете. В символична машина никога не е било необходимо да се знае, пълното име на файла.

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

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

Защо не мога да въведа системните функции или задавайте точки на прекъсване в системната памет Windows 98?

Така че ако искате да напишете своето собствено дебъгер?

Първата стъпка, която трябва да се направи след като разгледа WDBG. - Вземи една прекрасна книга (Джонатан Розенберг "Как дебъгерите Work"). Въпреки че не е налице изходния код дебъгер, това е - една прекрасна въвеждане и обсъждане на реалните проблеми, с които програмистът ще се изправят, когато пишете за корекция на грешки.

Необходимо е да се запознаят с формата PE и специфична процесора. върху която работите. Съпътстващи CD съдържа PECOFF.DOC. най-новата спецификация от Microsoft PE файлове. Повече подробности могат да бъдат изучавани от CPU водачите на Intel CPU на разположение на www.intel.com.

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

Както вече споменахме, символично машина DBGHELP.DLL достатъчна, за да поддържа някои отлични инструменти за отстраняване на грешки, но не достатъчно, за един истински дебъгер. Винаги можете да вземете развитие-ППБ файлов формат заден ход, но всички ние можем да се надяваме, че Microsoft ще някога отворен достъп до ППБ-файлове.

WDBG: какво да правя след това?

След като инсталирате WDBG дебъгер, че работи по предназначение. Въпреки това, тя може да се подобри в много отношения. Ето някои идеи, подобрения WDBG. Ако предпочитате да използвате разширение WDBG. моля да ме уведомите. Освен това, както вече бе споменато в главата. забележителна илюстрация на професионални умения програмист са примери за потребителски код (много полезно, например, и за интервюта за работа). Ако добавите малко важно свойство да WDBG. тогава ще трябва да го покажа!

  • Можете да направите потребителския интерфейс (UI) WDBG -otladchika. Първото подобрение, което може да се направи - да се подобри прилагането на този интерфейс. Интерфейс вече съдържа цялата необходима информация; трябва само да създаде по-добри начини да го представят.
  • Самата WDBG поддържа само прости, позиция точка на прекъсване (точки на прекъсване населено място). С BREAKPOINT.H BREAKPOINT.CPP и да добавите допълнителни интересни видове точки на прекъсване, като точки на прекъсване преминава към тезгяха (пропускат брой точки на прекъсване) или точка на прекъсване изрази (израз точки на прекъсване), за които прекъсването се появява само ако изразът е верен ги маркира. Уверете се, че имате ново прекъсване, използвайки функция CLocationBp (чрез който можете да получите кода за CE \ rializovanny и не е необходимо да се промени нещо в WDBG).
  • Би трябвало да можете да се разширява, без много усилия WDBG. за подпомагане на отстраняване на грешки на множество процеси (множествена процес debug-> Ging). Повечето от интерфейсите са построени да работят по схемата на процеса на идентифициране, така че трябва само да се следват от това, което процес, върху което работите по време на уведомленията за отстраняване на грешки.
  • WDBG интерфейс е изграден така, че да се даде възможност да се движат бързо, за да дистанционно отстраняване на грешки, както и разнообразие от процесора, оставяйки работата на основната част от интерфейса е почти същото. Напиши динамично дистанционно отстраняване на грешки библиотека и да се разшири WDBG, така че да се даде възможност на потребителя да избере къде да отстраняване на грешки: на местно или на отдалечена машина.
  • И накрая, за да WDBG-дебъгер е наистина полезно, винаги можете да напишете най-добрият Disassembler и символично машина за отстраняване на грешки символи C7 формат!

Тази глава предоставя общ преглед на функционирането на механизмите дебъгерите. С изучаването на различни инструменти, можете да подобрите използването на ресурсите. Тук бе представен Win32 API за отстраняване на грешки (API за отстраняване на грешки 32-битови Windows операционни системи) и някои допълнителни системи, като например характера на машината. Можете също така научих за съществуването на някои други дебъгерите (с изключение на C ++ дебъгер, визуалната). Накрая, един пример за пълно отстраняване на грешки - WDBG, който е добре илюстрирано чрез дебъгер.

Знаете ли, че компонентът диаграмата, Компонент диаграма - е метод за обектно-ориентиран дизайн, който описва характеристиките на физическото представяне на системата. Chart Компонент ви позволява да дефинирате архитектурата на системата се разработва, за създаване на връзката между компонентите.

Новини
Knights етер теория

Свързани статии

Подкрепете проекта - споделете линка, благодаря!