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

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

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

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

Інформація для налагодження

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

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

Інформація для налагодження може займати досить багато місця, особливо імена файлів і номери рядків. Тому двійкові файли з інформацією для налагодження можуть ставати досить великими, часто в кілька разів більшими за розмір очищеного файлу (з якого видалено символи та іншу інформацію для налагодження). Щоб уникнути цього додаткового розміру, більшість дистрибутивів операційних систем постачають очищені двійкові файли, тобто файли, з яких видалено всі символи налагодження (тип (3)). Наприклад, у Unix це виконується за допомогою команди strip. Якщо інформація для налагодження міститься в окремих файлах, ці файли зазвичай не постачаються разом із дистрибутивом і отримуються лише за потреби.

Команда strip видаляє лише інформацію типів (1) і (3) — першу не завжди повністю, оскільки їй також можна вказати зберігати символи, необхідні для обробки переміщень (), які часто зустрічаються в динамічній бібліотеці. Для повнішого видалення може знадобитися змінити параметри компілятора: наприклад, видимість символів безпосередньо впливає на розмір таблиці символів (1), а те, чи ввімкнено RTTI у C++, визначає, чи створюється інформація типу (2).

Вбудована інформація Unix-подібні системи

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

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

Windows

Windows PE/COFF може використовувати вбудований формат CodeView, хоча у готових програмах ця інформація зазвичай вилучається в окремий файл PDB (див. нижче). PE/COFF також може використовувати застарілий формат інформації налагодження COFF.

У наборах інструментів GNU для PE/COFF використовується DWARF. Цю інформацію також можна вилучити у файл PDB за допомогою cv2pdb.

Окремі файли для налагодження Символи налагодження Microsoft

Компілятори Microsoft створюють файл Program Database (PDB), що містить символи налагодження. Деякі компанії постачають PDB на своїх CD/DVD для забезпечення можливості усунення несправностей, а інші компанії (такі як Microsoft та Mozilla Corporation) дозволяють завантажувати символи налагодження з Інтернету. Налагоджувач WinDbg та IDE Visual Studio можна налаштувати на автоматичне завантаження символів налагодження динамічних бібліотек (DLL) для Microsoft Windows на вимогу. Символи налагодження PDB, які поширює Microsoft, містять лише публічні функції, глобальні змінні та їхні типи даних. Mozilla Corporation має подібну інфраструктуру, але поширює повну інформацію для налагодження.

Існують дві гілки формату файлів PDB для PE/COFF (exe, dll). Закритий формат використовується для файлів, що містять звичайний машинний код. «Відкритий» формат використовується для файлів, що містять код .NET.

Unix-подібні системи

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

На платформах Apple символи налагодження можуть бути необов'язково створені під час процесу побудови як файли dSYM, які є пакетами, що містять файл Mach-O без коду, але із символами налагодження. Apple використовує термін «symbolicate» для позначення заміни адрес у діагностичних файлах на зрозумілі людині значення.

Примітки