Отладочная інформація, клуб для програмістів
Будь-компілятор за замовчуванням постачає об'єктний файл налагоджування. Компілятор gcc також постачає файл такою інформацією і на результат ви можете подивитися самі. При компіляції проекту з попередній статті стати у нас з'явився файл a.out розміром 11817 байт (можливо у вас він може бути іншого розміру).
Вся ця налагоджувальна інформація призначається для налагодження програми отладчиком GNU Debugger. Запустити його ви можете командою:
При цьому запуститься відладчик і наша скомпільована програма. Про налагодженні ми з вами поговоримо окремо і більш детально.
Компілятор gcc може створювати зневадження в різних обсягах і форматах, контролювати які можна спеціальними ключами. Подивитися їх докладний опис можна командою man gcc.
Ключ -g створює налагоджування в рідному для операційної системи вигляді, він вибирає між кількома форматами: stabs. COFF. XCOFF або DWARF. На багатьох системах даний ключ дозволяє використовувати спеціальну інформацію, яку вміє використовувати тільки відладчик gdb. Інші ключі дозволяють більш тонко контролювати процес вбудовування налагоджувальної інформації.
Ключ -ggdb включає в виконуваний файл зневадження в рідному для ОС вигляді і доповнює її спеціалізованою інформацією для відладчика gdb.
Ключ -gstabs створює зневадження в форматі stabs без додаткових розширень gdb. Даний формат використовується отладчиком DBX на більшості BSD систем. Ключ -gstabs + доповнює зневадження розширенням зрозумілими отладчику gdb.
Ключ -gcoff створює зневадження в форматі COFF. яка використовується отладчиком SDB на більшості систем System V до версії System V R4.
Ключ -gxcoff постачає файл інформацією в форматі XCOFF. який використовується отладчиком DBX на системах IBM RS / 6000. Використання -gxcoff + влкючает використання додаткової інформації для gdb.
Ключ -gdwarf додає інфомацию в форматі DWARF пріняотм в системі System V Release 4. Відповідно ключ -gdwarf + додає можливостей отладчику gdb.
Додавання до цих ключам в кінці цифри дозволяє збільшити або зменшити рівень налагодження, тобто керувати розміром необхідної налагоджувальної інформації. Наприклад ключ:
Збільшить рівень налагодження до 3. за замовчуванням він дорівнює 2. При першому рівні налагодження компілятор включає в файл мінімальну кількість налагоджувальної інформації достатню для налагодження частин програми, які ви не планіровлі налагоджувати. У цю інформацію входить опис функцій і зовнішніх змінних, але не включається інформація про локальних змінних і номери рядків вихідного тексту. Другий рівень - це рівень за замовчуванням, включає в файл більшість потрібної налагоджувальної інформації. Третій рівень дозволяє додати екстра-інформацію, таку як визначення присутніх в програмі макросів.
Вище ви можете побачити інші ключі, які можна використовувати. Більшість цих ключів призначене для виведення дампа програми під час компіляції і служить не для налагодження програми, а для налагодження самого компілятора :)) Тому про них можна забути і не згадувати.
Отладочная інформація це звичайно добре, але вона може значно збільшити обсяг вашого файлу (в три-чотири рази). Для створення програм "релізів" існує окрема програма, що дозволяє видалити зневадження з запускається файлу. Називається ця програма strip. Для того, щоб повністю очистити файл від налагоджувальної інформації, потрібно викликати її з ключем -s.
Після обробки файлу цією командою його розмір зменшився практично в три рази і став 3156 байт. У порівнянні з 11 Кб до цього це дуже навіть добре.