GCC -g vs -g3 GDB Прапор: у чому різниця?


102

При компілюванні вихідного коду C з gcc або Clang, я завжди використовую -gпрапор для створення інформації про налагодження для gdb.

gcc -g -o helloworld helloworld.c

Я помітив, що -g3замість цього рекомендують деякі люди . Яка різниця між прапорами -gта -g3прапорами? Також є різниця між -gі -ggdb?


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

Переважна кількість запитань щодо SO "охоплює мою документацію", якщо ви готові викопати досить далеко. Це не вагома причина для відхилення питання.
BeeOnRope

Відповіді:


104

З документів :

Отримайте інформацію про налагодження у рідному форматі операційної системи (stabs, COFF, XCOFF або DWARF 2). GDB може працювати з цією інформацією про налагодження. У більшості систем, що використовують формат stabs, -g дозволяє використовувати додаткову інформацію про налагодження, яку може використовувати тільки GDB; ця додаткова інформація полегшує роботу налагодження в GDB, але, ймовірно, робить інші налагоджувачі збоєм або відмовляються читати програму. Якщо ви хочете контролювати, чи генерувати зайву інформацію, використовуйте -gstabs +, -gstabs, -gxcoff +, -gxcoff або -gvms (див. Нижче).

...


-ggdb

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


-gvmslevel

Попросіть інформацію про налагодження, а також використовуйте рівень, щоб вказати, скільки інформації. Типовий рівень - 2. Рівень 0 взагалі не дає інформації про налагодження. Таким чином, -g0 заперечує -g.

….

Рівень 3 включає додаткову інформацію, таку як усі макрозначення, наявні в програмі. Деякі налагоджувачі підтримують розширення макросів при використанні -g3.


8
Можна ще пояснити, яка різниця між, наприклад, "найбільш виразним форматом" та "додатковою інформацією"? Ці параметри безкоштовні? Багато з них згадують GDB ... Дякую!
rogerdpack

28

tl; dr: Щоб відповісти на ваше конкретне запитання, -g3"включає додаткову інформацію, таку як визначення макросів ... Деякі налагоджувачі підтримують розширення макросу при використанні -g3", хоча -gця додаткова інформація не включає.

Більш широка відповідь полягає в тому, що gcc підтримує чотири рівні інформації про налагодження, від -g0(інформація про налагодження відключена) до -g3(максимальна інформація про налагодження).

Вказання -gеквівалентно -g2. Цікаво, що документи gcc мало говорять про те, що інформація -g/ -g2включає чи виключає:

Попросіть інформацію про налагодження, а також використовуйте рівень, щоб вказати, скільки інформації. Типовий рівень - 2. Рівень 0 взагалі не дає інформації про налагодження. Таким чином, -g0 заперечує -g.

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

Рівень 3 включає додаткову інформацію, таку як усі макрозначення, наявні в програмі. Деякі налагоджувачі підтримують розширення макросів при використанні -g3.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.