THE BELL

Є ті, хто прочитали цю новину раніше вас.
Підпишіться, щоб отримувати статті свіжими.
Email
ім'я
Прізвище
Як ви хочете читати The Bell
без спаму

Для проведення налагодження ядра необхідно підключитися до комп'ютера за допомогою нуль-модемного кабелю або модемного з'єднання. Комп'ютер, що виконує налагодження, буде називатися "Host", а назва "Target" отримає проблемний комп'ютер.

Обидва комп'ютери повинні працювати під управлінням однієї і тієї ж версії Windows, а символьні файли для комп'ютера Target повинні бути встановлені на комп'ютері Host. Символьні файли надаються на компакт-диску Windows в каталозі Support \\ Debug.

Для включення налагодження необхідно внести зміни в файл BOOT.INI на комп'ютері Target.

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

attrib c: \\ boot.ini - r - s

2. Відредагуйте цей файл і в рядок запуску Windows додайте параметр / debug (для того, щоб повідомити системі про необхідність завантаження в оперативну пам'ять відладчика ядра при завантаженні Windows). додатковими параметрами є / Debugport, повідомляє системі, який порт COM необхідно використовувати (за замовчуванням COM2) і / Baudrate - для вказівки швидкості передачі даних (за замовчуванням вказана швидкість 19200 бод, але краще використовувати 9600). наприклад:


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

3. Збережіть файл.

4. Встановіть попередні атрибути файлу BOOT.INI:

attrib c: \\ boot.ini + r + s

В даному прикладі комп'ютер Target дозволив з'єднання через порт COM2 зі швидкістю 9600 біт / с.

Комп'ютер Host повинен бути налаштований з використанням параметрів, необхідних для проведення налагодження. Крім того, повинні бути встановлені символьні файли. Для їх установки перейдіть в каталог \\ support \\ debug на компакт-диску, а потім введіть команду:

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

наприклад:

expndsym f: d: \\ symbols

Установка може зайняти деякий час. Пам'ятайте, що якщо на комп'ютер Target були встановлені пакети оновлень, символьні файли цих пакетів також слід встановити на комп'ютер Host. Символьні файли для пакетів оновлень можна завантажити з САЙТЕГ компанії Microsoft.

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

Опис системних змінних

Визначення цих змінних можна розмістити в командному файлі для того, щоб уникнути введення відповідних команд при кожному завантаженні:

echo off
set _nt_debug_port \u003d com2
set _nt_debug_baud_rate \u003d 9600
set _nt_symbol_path \u003d d: \\ symbols \\ i386
set _nt_log_file_open \u003d d: \\ debug \\ logs \\ debug.log

Тепер необхідно скопіювати програмне забезпечення налагодження ядра, яке розташоване в каталозі support \\ debug \\<процессор> на компакт-диску (support \\ debug \\ I386). Найпростіше скопіювати весь каталог повністю, оскільки він має невеликий розмір (близько 2,5 Мбайт). Для платформи I386 використовується відладчик, який поставляється у вигляді файлу I386KD.EXE. Отладчик запускається за допомогою команди I386KD. Для введення команди натисніть комбінацію клавіш і почекайте, поки з'явиться запрошення командного рядка kd\u003e.

Відладчики режиму ядра знаходяться між CPU і операційною системою. Це означає, що, коли ви зупиняєте відладчик режиму ядра, операційна система також повністю зупиняється. Неважко здогадатися, що перехід операційної системи до різкого останову корисний, коли ви працюєте з таймером і над проблемами синхронізації. Все-таки, за винятком одного відладчика, про яке буде розказано нижче (в розділі "Отладчик SoftlCE" даної глави), не можна налагоджувати код призначеного для користувача режиму за допомогою отладчиков режиму ядра.

Отладчиков режиму ядра не так багато. Ось деякі з них: Windows 80386 Debugger (WDEB386), Kernel Debugger (1386KD), WinDBG і SoftlCE. Кожен з цих отладчиков коротко описаний в наступних розділах.

отладчик WDEB386

WDEB386 - це відладчик режиму ядра Windows 98, який розповсюджується в складі Platform SDK. Цей відладчик корисний тільки для розробників, які пишуть драйвери віртуальних пристроїв Windows 98 (VxD). Як і більшість отладчиков режиму ядра для операційних систем Windows, відладчик WDEB386 вимагає для роботи дві машини і нуль-модемний кабель. Дві машини необхідні тому, що частина відладчика, яка виконується на цільовій машині, має обмежений доступ до її апаратних засобів, так що він посилає свій висновок і отримує команди від іншої машини.

Отладчик WDEB386 має цікаву історію. Він починався як внутрішній фоновий інструмент Microsoft в епоху Windows 3.0. Його було важко використовувати, і він не мав достатньої підтримки для налагодження вихідного коду та інших приємних властивостей, якими нас зіпсували отладчики Visual C ++ і Visual Basic.

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

отладчик I386KD

Windows 2000 відрізняється від Windows 98 тем, що реально діюча частина відладчика режиму ядра є частьюNTOSKRNL. EXE - файлу головного ядра операційної системи Windows 2000. Цей відладчик доступний як у вільних (випускних), так і в перевірених (налагоджувальних) конфігураціях операційної системи. Щоб включити налагодження в режимі ядра, встановіть параметр завантажувача / DEBUG в BOOT. INI і, додатково, опцію завантажувача / DEBUGPORT, якщо необхідно встановити значення комунікаційного порту відладчика режиму ядра, що відрізняється від замовчуваного (СОМ1). I386KD виконується на своїй власній машині і повідомляється з машиною Windows 2000 через кабель нуль-модему.

Отладчик режиму ядра NTOSKRNL. EXE робить тільки те, що досить для управління CPU, так щоб операційна система могла бути налагоджена. Велика частина отладочной роботи - обробка символів, розширені точки переривання і дизасемблювання - виконується на стороні 1386KD. У свій час Windows NT 4 Device Driver Kit (DDK) документував протокол, який використовується в кабелі нуль-модему. Однак Microsoft більше його НЕ документує.

Міць 1386KD очевидна, якщо подивитися на все команди, які він пропонує, щоб отримати доступ до внутрішнього стану Windows 2000. Знання механізму роботи драйверів пристроїв в Windows 2000 допоможе програмісту стежити за висновком багатьох команд. Не дивлячись на всю свою міць, i386KD майже ніколи не застосовується, тому що це консольний додаток, яке дуже втомлює використовувати для отладок вихідного рівня.

анотація

Наведено порівняльний аналіз налагодження режиму користувача і режиму ядра стосовно операційній системі Microsoft Windows, Виділені відмінності і проблеми організації налагодження останнього. На основі отриманих результатів сформульовані основні вимоги до побудови отладчиков режиму ядра в разі аварійної та інтерактивної налагодження. проведено аналіз існуючих рішень на предмет відповідності вимогам. Зокрема, особливу увагу приділено отладчику Microsoft Windows Debugger.

Основна частина

Налагодження - це процес визначення та усунення причин помилок в програмному забезпеченні. У деяких проектах налагодження займає до 50% загального часу розробки. Налагодження може бути значно спрощена при використанні спеціалізованих інструментів, які постійно удосконалюються. Основним таким інструментом є відладчик, що дозволяє контролювати виконання ПО, спостерігати за його ходом і втручатися в нього. Кошти налагодження ядра переважно використовуються розробниками драйверів.

Інструментарій розробки прикладного програмного забезпечення пропонує програмісту широкий спектр можливостей. Будь-яка інтегрована середовище розробки включає в себе і можливість налагодження без необхідності використання сторонніх утиліт. Якщо ж мова йде про системний програмному забезпеченні і розробці драйверів зокрема, то в силу його специфіки процес розробки надзвичайно ускладнений і мало автоматизований. Всі фази розробки, в числі яких і налагодження, є роздільними. Для проведення кожної з них потрібні особливі умови: написання програмного коду виконується на повноцінній комп'ютерній системі, Налагодження - на отладочной системі, тестування - в залежності від обставин і т.д. Сам же відладчик режиму ядра більш складний в освоєнні і, відповідно, менш дружній.

В цілому можна говорити про нестачу коштів налагодження ядра. Хоча такі кошти є в наявності, часто говорити про альтернативи не доводиться. Наприклад, відладчик Microsoft Windows Debugger має занадто високий поріг входження. Багато програмістів говорять про перший негативний досвід при знайомстві з ним, а більшість його можливостей залишаються незатребуваної.

Виходячи зі структури віртуального адресного простору, якщо в додатку допущена помилка, внаслідок якої додаток виконає запис даних в довільне місце пам'яті, то додаток зашкодить тільки власну пам'ять і не вплине на роботу інших додатків і операційної систему. Тоді як програмний код режиму ядра в стані пошкодити важливі структури даних операційної системи, що неминуче призведе до загального збою. Неефективно написаний драйвер також може стати причиною серйозної деградації всієї операційної системи.

    Сучасні отладчики забезпечують наступні базові функції:
  • налагодження на рівні вихідного коду;
  • управління виконанням;
  • перегляд і зміна пам'яті;
  • перегляд і зміна вмісту регістрів процесора;
  • перегляд стека викликів.

Для полегшення роботи з дизасемблювати кодом застосовуються т.зв. налагоджувальні символи. Під час роботи компоновщика, крім способу виконуваного файлу також може бути створений файл даних, що містить інформацію, яка не потрібна при виконанні програми, але надзвичайно корисна при її налагодженні: імена функцій, глобальних змінних, опис структур. Налагодження символи доступні для всіх виконуваних файлів операційної системи Windows.

Під управлінням виконанням мається на увазі здатність переривати і відновлювати виконання програмного коду по досягненню заданої команди в програмному коді. Якщо програмний код виконується в покроковому режимі - переривання виникає для кожної лексеми мови програмування або при виході з підпрограми. При вільному виконанні переривання виконання виникає в заздалегідь обумовлених ділянках коду - місцях, в яких встановлені точки зупинки.

При перериванні коду режиму ядра виникають наступна дилема. Отладчик для взаємодії з програмістом використовує інтерфейс користувача. Тобто як мінімум видима частина відладчика виконується в режимі користувача і для його побудови природно використовує інтерфейс прикладного програмування ( Windows API), Який в свою чергу спирається на модулі режиму ядра. Таким чином, припинення коду режиму ядра може привести до взаємної блокування: система перестане відповідати на запити користувача.

Для доступу до пам'яті ядра складові частини відладчика також повинні виконуватися в режимі ядра. Це веде до виникнення відразу двох проблем, які є очевидним наслідком організації пам'яті в захищеному режимі процесора.

Перша проблема стосується трансляції віртуальних адрес пам'яті. Драйвера постійно взаємодіють з додатками для користувача режиму, виконуючи звернення до їх пам'яті. Операційна система Windows транслює віртуальні адреси у фізичні, керуючись поняттям контексту потоку. Контекст потоку - структура, яка відображає стан потоку і включає, зокрема, набір регістрів і деяку іншу інформацію. Коли управління передається іншому потоку, виникає переключення контексту, при якому зберігається інформація про одному потоці і відновлюється інформації про інше. При перемиканні контексту потоку на потік іншого процесу перемикається також і каталог сторінок, що використовується для трансляції віртуальних адрес в фізичні.

Особливість полягає в тому, що при диспетчеризації системних викликів операційна система Windows не переключає автоматично контекст. Завдяки цьому код режиму ядра може використовувати віртуальні адреси призначеного для користувача режиму.

Інакше справа йде при диспетчеризації переривань або виконанні системних потоків. Переривання може відбутися в будь-який момент, тому не можна передбачити, який контекст потоку буде використовуватися. Системні ж потоки не належать якомусь процесу і не можуть транслювати ВА призначеного для користувача режиму. Звідси випливає, що в цих ситуаціях не можна звернутися до пам'яті користувальницького режиму.

Другою проблемою є звернення до переміщуваного пам'яті. Велика частина інформації в пам'яті є переміщуваної і в будь-який момент може бути переміщена з фізичної пам'яті на жорсткий диск в сторінковий файл. Якщо звернутися до сторінці, яка відсутня у фізичній пам'яті, в нормальній ситуації процесор згенерує переривання Page Fault, яке буде оброблено диспетчером пам'яті, і в результаті сторінка буде прочитана з сторінкового файлу і завантажена в фізичну пам'ять.

Описане поведінка порушується, якщо програмний код відладчика змушений використовувати високий рівень запитів переривань (interrupt request levels, IRQL). При IRQL, що збігається з або перевищує IRQL диспетчера пам'яті останній не зможе завантажити відсутню сторінку, тому що операційна система буде блокувати переривання Page Fault. Це призведе до краху операційної системи.

Налагодження прийнято розділяти на інтерактивну і аварійну. При інтерактивній локальної налагодженні відладчик виконується в тій же системі, що і об'єкт налагодження. При інтерактивній віддаленої налагодження відладчик і об'єкт налагодження виконується в різних системах. При налагодженні коду ядра система повинна контролюватися, починаючи з перших етапів її завантаження, коли мережа ще не функціонує, тому для зв'язку систем застосовують прості послідовні інтерфейси, такі як COM, FireWire, USB. Останнім часом, завдяки тенденціям розвитку віртуалізації ПО на різних рівнях абстракцій, все частіше залучають віртуальні машини. Гостьова ОС виступає в якості отлаживаемой, розміщена ОС включає інтерфейс користувача відладчика.

Таким чином, для аварійної налагодження не потрібно установка засоби налагодження на тестовому комп'ютері. У дистрибутив операційної системи Windows включені механізми для реалізації аварійної налагодження. Перед перезавантаженням операційна система може зберігати інформацію про свій стан, яку розробник може проаналізувати і з'ясувати причину. Така інформація, збережена в файл, називається дампом пам'яті.

Основні засоби налагодження режиму ядра надаються самим виробником операційної системи Windows в рамках безкоштовного пакета « Debugging Tools for Windows ». Засоби включають графічний і консольний отладчики WinDbg і KD відповідно (далі Windows Debugger). Робота цих отладчиков спирається на механізми, передбачені розробниками операційної системи і закладені в її ядрі.

Основним режимом для Windows Debugger є режим інтерпретатора команд. завдяки модульній структурі, Поряд з поставляються розробниками командами Windows Debugger підтримує сторонні модулі, званими розширеннями. Насправді більшість вбудованих команд також оформлено у вигляді розширень.

Windows Debugger орієнтований на віддалену інтерактивну і аварійні налагодження, при використанні яких розкриваються всі його можливості. У той же час повноцінна локальна інтерактивна налагодження не тримається відладчик дозволяє тільки переглядати деякі структури ядра.

Існує модуль розширення для Windows Debugger під назвою LiveKD, створений Марком Руссиновича, який в деякому сенсі реалізує локальну інтерактивну налагодження. LiveKD на ходу створює дамп пам'яті робочої системи і використовує його для налагодження.

Пакет інструментів «Debugging Tools for Windows» регулярно оновлюється і підтримує всі сучасні операційний системи Windows.

Отладчик ядра SoftICE, що випускався компанією Compuware в пакеті програм DriverStudio, традиційно виступав альтернативою пакету «Debugging Tools for Windows». відмінною рисою SoftICE була реалізація локальної інтерактивної налагодження на підтримуваному апаратному забезпеченні. Отладчик практично повністю міг контролювати роботу операційної системи.

З 3 квітня 2006 року продажі продуктів сімейства «DriverStudio» було припинено через «безлічі технічних і ділових проблем, а також загального стану ринку». останньою версією операційної системи, підтримка якої була реалізована, є Windows XP Service Pack 2. Як правило, пакети сервісних оновлень не змінюють прикладний інтерфейс операційної системи, але номера системних викликів і інша недокументированная інформація може зазнавати змін. Отладчик SoftICE спирався на жорстко-прописані адреси внутрішніх структур даних. Як наслідок - з виходом Service Pack 3 сумісність була порушена. Очевидно, що більш пізні версії операційної системи Windows також не підтримуються.

Syser Kernel Debugger створений невеликий китайською компанією Sysersoft як заміна отладчику SoftICE. перша фінальна версія була випущена в 2007 році. Як і SoftICE, Syser Kernel Debugger здатний виконувати інтерактивну налагодження на працюючій системі. Підтримуваними є тільки 32-розрядні редакції сучасних версій Windows.

на наразі Windows Debugger є основним інструментом серед розробників модулів ядра. Його також використовує команда розробників ядра операційної системи Windows.

Як запустити відладчик ядра?

Відповідь майстра:

В процесі розробки програмного забезпечення є одна дуже важлива складова - це налагодження. По відношенню до прикладним програмам вона здійснюється засобами, які працюють в режимі користувача і часто вбудованими в IDE. Для того щоб була можливість налагодити, наприклад, драйвера, необхідно запустити відладчик ядра.

Потрібно запустити процесор командний cmd. Відкрийте меню «Пуск» на панелі задач. У вікні клацніть на пункт «Виконати ...». З'явиться вікно «Запуск програми». У текстовому полі введіть cmd, після цього натисніть кнопку «ОК».

тепер створіть резервну копію файлу boot.ini. Спочатку дізнайтеся інсталяційний шлях поточної копії Windows, скориставшись командою: echo% SystemRoot%

Далі перейдіть на диск, з встановленою операційною системою, ввівши літери пристрою, а після них, поставивши двокрапка. За допомогою команди cd, перейдіть в кореневий каталог. Тепер використовуючи команду attrib, зніміть з файлу boot.ini атрибути «прихований», «тільки для читання» і «системний». Командою copy створіть резервну копію, а потім встановіть атрибути на місце.

Для виведення поточного списку варіантів завантаження, скористайтеся командою bootcfg / query. Перегляньте список і визначте той елемент, на підставі якого будуть створюватися нові настройки з можливістю налагодження в режимі ядра. Ідентифікатор завантажувального запису слід запам'ятати.

Скористайтеся командою bootcfg / copy для створення завантажувального запису. Для того щоб вказати ідентифікатора запису, яку будете копіювати, скористайтеся параметром / id. Використовуючи параметр / d, задайте ім'я записи, яка буде відображатися. Тепер потрібно знову перейти до списку варіантів завантаження, використовуючи команду bootcfg / query, і подивіться ідентифікатор доданої записи.

Тепер потрібно включити опції для запуску відладчика ядра в раніше створену завантажувальний запис. Якщо ви будете робити налагодження на цільовій машині, то просто потрібно додати опцію / debug.

Якщо ви хочете здійснити віддалену налагодження з підключенням цільового комп'ютера через com-порт до хост-машині, то скористайтеся опціями / port і / baud для того щоб вказати номер порту і швидкість обміну.

Якщо ви будете робити віддалене налагодження з підключенням через кабель FireWire (інтерфейс IEEE 1394), то для того щоб включити відповідний режим використовуйте опцію / dbg1394 і для того щоб вказати номер каналу опцію / ch.

Щоб переконатися в тому, що зміни внесені, перевірте завантажувальні використовуючи команду bootcfg з параметром / query. Здійснивши команду exit, закрийте вікно командного процесора.

Виконайте необхідні налаштування завантаження операційної системи. Відкрийте через меню «Пуск» панель управління, і вже в ній відкрийте елемент «Система». У вікні «Властивості системи» виберіть вкладку «Додатково». У цій вкладці виберіть розділ з назвою «Завантаження і відновлення» і в ньому натисніть на кнопку «Параметри». У вікні "Завантаження і відновлення» потрібно активувати опцію «Відображати список операційних систем». Закрийте обидва діалогових вікна кнопкою «ОК».

Виконайте перезавантаження комп'ютера. Виберіть завантаження з отладчиком. Увійдіть в систему і починайте працювати на цільовій машині або почніть віддалену налагодження. Скористайтеся такими засобами як WinDbg і KD.

Отладчик - друга після компілятора річ, необхідна для створення програм. Однак багато хто з тих, хто пише комп'ютерні програми і користується отладчиком, не в курсі того, які принципи і механізми його роботи.


Важко бути отладчиком ...

У світлі того, що програмісти використовують відладчик денно і нощно, особливо коли увійдуть в режим глибокого налагодження, варто сказати, що, будь відладчик не програмою, а залізякою, він би напевно перегрівся і зламався. Тому що стільки роботи, скільки її дістається отладчику, не має навіть компілятор.

Звичайно, оскільки зараз безліч всяких різних мов програмування, то і отладчики для кожного з них свої. І, природно, для різних категорій цих мов є відмінності в роботі отладчиков: наприклад, відладчик програм на интерпретируемом Ruby буде працювати інакше, ніж для компилируемого в байт-код мови Java, А відладчик для Java, в свою чергу, матиме відмінності від відладчика Visual C ++.

Я розповім про налагодження для платформи Windows. Зрозумівши принципи роботи отладчиков для неї, можна буде розібратися і з отладчиками під POSIX-системи, і з отладчиками, які працюють не на рівні операційної системи, а на рівні віртуальної машини або будь-якого інтерпретатора.


Відладчики для Windows: два види

Існують два принципово різних види отладчиков під Windows. Думаю, з першими стикалися все, коли програмували на Delphi (НЕ програмували на ньому? Насилу віриться. На чому ж ви програмували в школі і на молодших курсах?). Це отладчики призначених для користувача додатків. Їх чимало, і вони існують як окремо, так і (особливо, до речі, часто) в складі інтегрованих середовищ розробки додатків. Серед отладчиков, які розповсюджуються як окремі програмні продукти, традиційно виділяють OllyDbg, і про нього я колись писав в "Комп'ютерних вістях".

Другий вид отладчиков - це отладчики ядра операційної системи. Вони зустрічаються і використовуються рідше і за своїм устроєм значно відрізняються від отладчиков призначених для користувача додатків. Найвідоміший, і, одночасно, найкращий з отладчиков ядра - це SoftIce. Можливо, ви про нього не тільки чули, але навіть користувалися.

Оскільки робота кожного з двох видів отладчиков має свою специфіку, то я розповім про кожного з них докладніше.


Отладчик призначених для користувача додатків

Отладчик призначених для користувача додатків влаштований простіше, оскільки саму чорну і брудну роботу бере на себе операційна система. У Windows є спеціальні програмні інтерфейси, які призначені для налагодження додатків користувацького рівня - називаються вони Windows Debugging API. Саме налагоджувальними API користуються все отладчики, які вбудовані в популярні інтегровані середовища розробки для Windows.

Для того щоб налагодження почалася, відладчик повинен запустити налагоджувати процес спеціальним чином - таким, щоб система знала, що цей процес буде перебувати під налагодженням. Після цього починається цикл налагодження: програма виконується до настання певної події, яке так і називається - налагоджувальне подія, або debug event. При цьому цикл налагодження запускається в окремому потоці, щоб запобігти зависання відладчика.

Але це тільки початок. Тому що найцікавіше в роботі відладчика починається вже тоді, коли налагоджувальне подія відбулася. Адже, по суті, в чому полягає робота відладчика? Щоб допомогти програмісту локалізувати помилку з точністю до конкретної функції, конкретної операції, конкретної змінної. У цій нелегкій справі отладчику також може допомогти операційна система.

Отже, налагоджувальне подія відбулася, і далі треба якимось чином дізнатися, як це пов'язано з текстом програми. Це можливо тільки якщо в саму програму включена спеціальна налагоджувальна інформація - таблиця налагоджувальних символів. Вона містить в собі інформацію про відповідність між адресами та іменами функцій, типів даних, номерами рядків коду. Саме завдяки їм можлива та налагодження, з якою знайомий кожен Windows-програміст. Таблиці символів мають різні формати, а тому не завжди можливо налагодити програму, скомпільовану компілятором одного розробника, за допомогою відладчика від іншого виробника. Але, правда, найпоширеніший формат все ж можна вказати - це PDB (Program Database), і розроблений він, природно, корпорацією Microsoft.

Отже, якщо отладочная таблиця символів має формат PDB, то можна скористатися спеціальним інструментом від корпорації Microsoft - символьним налагоджувальний процесором. Колись він входив в ядро \u200b\u200bсистеми і називався Imagehlp.dll, але вже давним-давно був виділений в окрему бібліотеку. Символьний процесор дозволяє знаходити за заданою адресою найближчу відкриту функцію або глобальну змінну, а також номер рядка і назва файлу з вихідним текстом, в якому цей рядок знаходиться. Підтримуються і зворотні операції, наприклад, пошук адреси функції по її імені.

Це, звичайно, далеко не вся робота, якою займається відладчик призначених для користувача додатків. Наприклад, при налагодженні багатопоточних додатків з'являються багато дуже тонкі моменти, пов'язані із взаємодією потоків. Навіть при налагодженні таких порівняно простих речей, як сервіси, є свої нюанси.

Але на нюансах ми зараз зупинятися не будемо - в кінці статті я скажу вам, де про них почитати. Зараз же давайте подивимося на отладчики ядра.


отладчик ядра

Відладчики ядра - програми набагато складніші, ніж отладчики призначених для користувача додатків, і, гадаю, цілком зрозуміло, чому: у них відсутній помічник у вигляді операційної системи. Вона в даному випадку є їхнім клієнтом, адже саме її вони, врешті-решт, повинні налагоджувати.

Більшість отладчиков ядра вимагає для своєї роботи два комп'ютери, з'єднаних нуль-модемним кабелем. Нуль-модем - це спосіб з'єднання двох комп'ютерів безпосередньо кабелем через їх COM або LTP-порти. Другий комп'ютер потрібен, тому що частина відладчика, що сидить на першому (на тому, де встановлена \u200b\u200bналагоджувати система), має обмежений доступ до апаратного забезпечення, і тому весь висновок даних йде по нуль-модему на другий комп'ютер.

У сучасних процесорах архітектури Intel x86 є спеціальні налагоджувальні регістри (і в старенькому 368-м, і в більш нових моделях процесорів їх всього вісім, вони іменуються як DR0-DR7). Ці регістри дозволяють отладчику ставити контрольні точки на читання і запис пам'яті, а також на порти введення-виведення. У загальному вигляді все виглядає саме так, і я не думаю, що варто зараз розписувати докладно, за що відповідає кожен з налагоджувальних регістрів, якими переривань реалізуються точки зупину і давати іншу подібну інформацію. Краще розповім про конкретні існуючих відладчика ядра для Windows.

Ну, по-перше, це відладчик, вбудований в саме ядро \u200b\u200bопераційної системи. Він є у всіх ОС лінійки NT, починаючи з Windows 2000. Це частина файлу NTOSKRNL.EXE, і включити його можна, задавши опцію "/ Debug" для операційної системи в BOOT.INI. Цей відладчик потребує нуль-модемному з'єднанні і другому комп'ютері з такою ж ОС.

Є ще один відладчик ядра від Microsoft - WinDBG. Строго кажучи, це не відладчик ядра, а гібридний відладчик, який можна використовувати і для налагодження додатків рівня користувача. Він, на відміну від відладчика, вбудованого в ядро, має графічну оболонку, а тому користуватися ним простіше. Цей відладчик також підтримує спеціальні розширення, які можуть стати в нагоді при вирішенні деяких завдань налагодження. Але і він для налагодження ядра вимагає два комп'ютери.

Однак існує відладчик ядра, який може здійснювати налагодження на одному-єдиному комп'ютері. Це SoftIce. При цьому SoftIce вміє налагоджувати і прикладні програми. Використання цього відладчика для призначених для користувача програм виправдано, наприклад, в разі налагодження систем реального часу, що прив'язуються до системного таймеру. Якщо виконувати налагодження за допомогою звичайного відладчика, то результат може виявитися неправильним навіть при правильній роботі програми, а SoftIce зупинить і програму, і таймер. Це корисно при налагодженні багатопоточних додатків. До всього іншого, SoftIce має дуже, дуже добре розвинені засоби виведення інформації про всі потоках в системі, про синхронізацію потоків для багатопоточних додатків, інформації про handle "ах ... Єдиний мінус цього відладчика - його складність для прикладного програміста. Але з отладчиков ядра це самий простий і ефективний.


Для самих допитливих

Зараз, звичайно, розмова про відладчика для Windows-додатків не так актуальне, як ще років десять тому. Весь світ зацікавився Інтернетом, і основними користувачами SoftIce стали крякери, невтомні трудівники на ниві піратства. Тим не менш, це не так уже й погано. Спілкування з SoftIce "ом, безсумнівно, розвиває людини в плані знань про комп'ютер, хоча, звичайно, якщо спілкуватися тільки з отладчиками і не спілкуватися з живими людьми, можливі деякі побічні ефекти. Ну, про це, я думаю, все і так здогадуються.

Відладчики - одні з найбільш своєрідних видів програмного забезпечення, але в плані розробки навіть отладчики програм рівня користувача досить складні. Але, тим не менше, якщо у вас є бажання і час для того, щоб розробити власний відладчик, ваші знання в області операційних систем і програмування істотно зростуть, а значить, зростуть і шанси на високооплачувану роботу.

Отже, якщо вам хочеться створити власний відладчик, то спочатку варто ознайомитися з матеріалами на цю тему. На мій погляд, найкращим посібником для початку буде книга Джона Роббінса "Налагодження Windows-додатків". Вона вже стара, 2001 року видання, але інформація, викладена в ній, актуальна і зараз, оскільки має загальний, навіть в деякому роді фундаментальний характер. У цій книзі є приклади написання отладчиков для Windows, крім того, вона стане в нагоді вам, якщо ви програмуєте на C ++ і хочете краще розібратися в обробці виключень. Власне, саме з цієї книги я і почерпнув відомості про відладчика, викладені в статті. Якщо ж знайти цю книгу не вийде (все-таки, вона вже досить стара), є кілька адрес, які можуть вам стати в нагоді. Перший - ось такий: www.xakep.ru/post/19158/default.asp. Ця стаття з журналу "Хакер" трохи докладніше розповідає про відладчика ядра, ніж це зробив я, а крім того, в ній наведено код найпростішого відладчика. А за адресою kalashnikoff.ru/Assembler/issues/016.htm можна дізнатися про те, як написати DOS-відладчик. Але, звичайно, найкраще читати MSDN і попутно знайти який-небудь відладчик з відкритими вихідними текстами, щоб в ньому розібратися. Ну і, звичайно, якщо ви взялися за написання відладчика, то успіхів вам у цій нелегкій справі!

THE BELL

Є ті, хто прочитали цю новину раніше вас.
Підпишіться, щоб отримувати статті свіжими.
Email
ім'я
Прізвище
Як ви хочете читати The Bell
без спаму