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.