Засоби налагодження для windows

У пакет засобів налагодження для Windows входять сучасні налагоджувальні інструменти, за допомогою яких можна досліджувати внутрішній устрій Windows. В останню версію в якості складової частини включений набір для розробки програмного забезпечення - Windows Software Development Kit (SDK).

Кошти з цього набору можуть використовуватися для налагодження як процесів користувацького режиму, так і процесів ядра.

ПРИМІТКА. Кошти налагодження Debugging Tools for Windows досить часто оновлюються і випускаються незалежно від версій операційної системи Windows, тому частіше перевіряйте наявність нових версій.

ПОРАДА. Налагодження в режимі користувача.

Кошти налагодження можуть також використовуватися для підключення до процесу користувацького режиму і для вивчення і (або) зміни стану пам'яті процесу. При підключенні до процесу є два варіанти:

  • Нав'язливий (Invasive). Якщо при підключенні до запущеного процесу немае чітких вказівок, для підключення відладчика до отлаживаемому коду використовується Windows-функція DebugActiveProcess. Тим самим створюються умови для дослідження і (або) зміни пам'яті процесу, установки контрольних точок і виконання інших налагоджувальних функцій. Windows дозволяє зупинити налагодження без переривання цільового процесу, якщо відладчик відключається без переривання своєї роботи.
  • Ненав'язливий (Noninvasive). При такому варіанті відладчик просто відкриває процес за допомогою функції OpenProcess. Цей процес не може підключитися до іншого процесу в якості відладчика. Це дозволяє досліджувати і (або) змінювати пам'ять цільового процесу, але ви не можете встановлювати контрольні точки.

Із засобами налагодження можна також відкривати файли дампа процесу користувацького режиму.

Для налагодження ядра можуть використовуватися два відладчика: працюючий у вікні командного рядка (Kd.exe) і має графічний користувальницький інтерфейс, GUI (Windbg.exe). Обидва відладчика надають однаковий набір команд, тому вибір цілком залежить від особистих переваг. Ці засоби дозволяють виконувати три типи налагодження ядра:

  • Відкрити аварійний дамп-файл, створений в результаті аварійного завершення роботи системи.
  • Підключитися до діючої, працюючій системі і досліджувати стан системи (або встановити контрольні точки, якщо ведеться налагодження коду драйвера пристрою). Для цієї операції потрібні два комп'ютери - цільової і ведучий. Цільовий комп'ютер містить отлаживаемую систему, а ведучий - систему, на якій запущений відладчик. Цільова система може бути підключена до провідної через нуль-модемний кабель, кабель IEEE 1394 або оцінний кабель USB 2.0. Цільова система повинна бути завантажена в режимі налагодження (або шляхом натискання F8 в процесі завантаження і вибору пункту Режим налагодження (Debugging Mode), або шляхом настройки системи на запуск в режимі налагодження, використовуючи Bcdedit або Msconfig.exe). Можна також підключитися через пойменований канал, який застосовується при налагодженні через віртуальну машину (створену такими засобами, як Hyper-V, Virtual PC або VMWare), шляхом виставлення гостьовою операційною системою послідовного порту в якості пойменованого канального пристрої.
  • Системи Windows дозволяють також зв'язок із локальною системою і досліджувати її стан. Це називається «локальної налагодженням ядра». Щоб приступити до локальної налагодженні ядра за допомогою відладчика WinDbg, відкрийте меню File (Файл), виберіть пункт Kernel Debug (Налагодження ядра), клацніть на вкладці Local (Локальна), а потім клацніть на кнопці OK. Цільова система повинна бути завантажена в отладочном режимі. Приклад з'являється при цьому екрану показаний на рис. 1.6. У режимі локальної налагодження ядра не працюють деякі команди відладчика ядра (наприклад, команда .dump, призначена для створення дампа пам'яті, хоча такий дамп можна створити за допомогою розглянутого далі кошти LiveKd).

Засоби налагодження для windows
Локальна налагодження ядра

Щоб продемонструвати вміст внутрішньої структури даних, що включає відомості про рух, процесах, пакетах запитів на введення-виведення даних та інформації про управління пам'яттю, після підключення до режиму налагодження ядра можна скористатися однією з безлічі команд розширення відладчика (команд, що починаються з символу «!» ).

Відмінним підсобним довідковим матеріалом може послужити файл Debugger.chm, що міститься в настановної папці відладчика WinDbg. У ньому наводиться документація по всіх функціональних можливостей і розширень відладчика ядра. На додаток до цього команда dt (display type - відобразити тип) може відформатувати понад 1000 структур ядра, оскільки в файлах символів ядра для Windows міститься інформація про типи, які відладчик може використовувати для форматування структур.

Експеримент: Відображення інформації про типи для структур ядра.

Щоб вивести список структур ядра, чий тип інформації включений в символи ядра, наберіть в отладчике ядра команду dt nt! _ *. Частковий зразок виведення має наступний вигляд:

Командою dt можна також скористатися для пошуку певних структур, використовуючи закладену в цю команду можливість застосування символів-заступників. Наприклад, якщо ведеться пошук імені структури для об'єкта interrupt, потрібно набрати команду dt nt! _ * Interrupt *:

lkd> dt nt! _ * interrupt *

Потім, як показано в наступному прикладі, команду dt можна використовувати для форматування певної структури:

lkd> dt nt! _kinterrupt

+0x000 Type. Int2B

+0x002 Size. Int2B

+0x008 InterruptListEntry. _LIST_ENTRY

+0x018 ServiceRoutine. Ptr64 unsigned char

+0x020 MessageServiceRoutine. Ptr64 unsigned char

+0x028 MessageIndex. Uint4B

+0x030 ServiceContext. Ptr64 Void

+0x038 SpinLock. Uint8B

+0x040 TickCount. Uint4B

+0x048 ActualLock. Ptr64 Uint8B

+0x050 DispatchAddress. Ptr64 void

+0x058 Vector. Uint4B

+0x05c Irql. UChar

+0x05d SynchronizeIrql. UChar

+0x05e FloatingSave. UChar

+0x05f Connected. UChar

+0x060 Number. Uint4B

+0x064 ShareVector. UChar

+0x065 Pad. [3] Char

+0x068 Mode. _KINTERRUPT_MODE

+0x06c Polarity. _KINTERRUPT_POLARITY

+0x070 ServiceCount. Uint4B

+0x074 DispatchCount. Uint4B

+0x078 Rsvd1. Uint8B

+0x080 TrapFrame. Ptr64 _KTRAP_FRAME

+0x088 Reserved. Ptr64 Void

+0x090 DispatchCode. [4] Uint4B

Слід зауважити, що при виконанні команди dt підструктури (структури всередині структур) за замовчуванням не показуються. Для виконання рекурсії підструктур потрібно скористатися ключем -r. Наприклад, скористатися цим ключем для виведення об'єкта переривання ядра з показом формату структури _LIST_ENTRY, що зберігається в поле InterruptListEntry:

lkd> dt nt! _kinterrupt -r

+0x000 Type. Int2B

+0x002 Size. Int2B

+0x008 InterruptListEntry. _LIST_ENTRY

+0x000 Flink. Ptr64 _LIST_ENTRY

+0x000 Flink. Ptr64 _LIST_ENTRY

+0x008 Blink. Ptr64 _LIST_ENTRY

+0x008 Blink. Ptr64 _LIST_ENTRY

+0x000 Flink. Ptr64 _LIST_ENTRY

+0x008 Blink. Ptr64 _LIST_ENTRY

У файлі довідки Debugging Tools for Windows також пояснюється, як налаштовуються і використовуються отладчики ядра. Додаткові подробиці використання отладчиков ядра, призначені безпосередньо для творців драйверів пристроїв, можуть бути знайдені в документації по набору Windows Driver Kit.