Налагоджувальне складання

Існує версія Windows, звана налагоджувальною збіркою (checked build), яка доступна лише передплатникам MSDN Operating Systems. Це перекомпільований вихідний код Windows з виставленим прапорцем часу компіляції DBG (включає умовний код налагодження та трасування).

Крім того, щоб було простіше зрозуміти машинний код, не виконується подальша обробка двійкових кодів Windows, що оптимізує розташування коду для швидкого виконання. (Див. розділ "Debugging Performance-Optimized Code" у файлі довідки Debugging Tools for Windows.)

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

Експеримент: Визначення факту запуску налагоджувального складання.

Щоб вивести на екран інформацію про те, яка саме збірка запущена, налагоджувальна або надходить у продаж (яка називається вільною), вбудованого засобу не існує. Але ця інформація доступна через властивість "Debug" класу Win32_OperatingSystem інструментарію управління WindowsManagementInstrumentation (WMI). Значення цієї властивості виводиться за допомогою прикладу сценарію Microsoft Visual Basic:

Set objWMIService = GetObject("winmgmts:" _

Set colOperatingSystems =objWMIService.ExecQuery _

("SELECT * FROM Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems

Wscript.Echo "Заголовок: " & objOperatingSystem.Caption

Wscript.Echo "Налагодження: " & objOperatingSystem.Debug

Wscript.Echo "Версія: " & objOperatingSystem.Version

Щоб побачити його в роботі, наберіть попередній код та збережіть його у файлі.

При запуску сценарію на екран буде виведено таку інформацію:

Сервер сценаріїв Windows (Microsoft R) версія 5.8

Заголовок: Microsoft Windows 7 Ultimate

Ця система запущена не з налагоджувального складання, оскільки показаний тут прапорець налагодження не встановлений, тобто має значення False (Брехня).

Основна частина додаткового коду у виконуваних файлах налагоджувальної версії є результатом використання макросу ASSERT та (або) макросу NT_ASSERT, які визначені в заголовному файлі WDK Wdm.h та описані у документі WDK. Макрос перевіряє умову (наприклад, прийнятність структури даних або параметра), і якщо вираз обчислюється в FALSE, макрос викликає функцію RtlAssert, що працює в режимі ядра, яка викликає функцію DbgPrintEx для надсилання тексту налагоджувального повідомлення в призначений для цього буфер.

Якщо підключений налагоджувач ядра, це повідомлення виводиться автоматично разом із запитанням користувача про те, що робити у зв'язку з повідомленням про відмову (установити контрольну точку, проігнорувати, завершити процес або завершити потік). Якщо система не була запущена з відладчиком ядра (з використанням параметра налагодження в базі даних конфігурації завантаження - Boot Configuration Database, BCD) і відладчик ядра не підключений, невдале виконання тесту затвердження - ASSERT призведе до помилки перевіркисистеми.

Перелік перевірок ASSERT, які проводяться деякими підпрограмами підтримки ядра, наведено в розділі "Checked Build ASSERTs" документації WDK.

Налагоджувальна збірка може також стати в нагоді системним адміністраторам своїм додатковим інформаційним трасуванням, яке може бути включене для деяких компонентів. (Докладні інструкції дано в статті баз знань Microsoft «HOWTO: Enable Verbose Debug Tracing in Various Drivers and Subsystems».)

Щоб скористатися версією налагодження операційної системи необов'язково встановлювати всю налагоджувальну збірку. Достатньо в звичайну установку скопіювати налагоджувальну версію образу ядра (Ntoskrnl.exe) і відповідну HAL-бібліотеку (Hal.dll).

Перевага такого підходу полягає в тому, що драйвери пристроїв та інші фрагменти коду ядра отримують строгий контроль, властивий налагоджувальному складання без необхідності запуску лагоджувальних версій всіх компонентів системи, що працюють повільніше. Детальні інструкції наведені в розділі "Installing Just the Checked Operating System and HAL" WDK-документації.

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

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