2012-05-06 1 views
58

При компиляции исходного кода C с помощью gcc или Clang я всегда использую флаг -g для генерации информации для отладки для gdb.GCC -g vs -g3 GDB Flag: В чем разница?

gcc -g -o helloworld helloworld.c

Я заметил, что некоторые люди рекомендуют -g3 вместо этого. В чем разница между флагами -g и -g3? Также существует разница между -g и -ggdb?

+7

Что вы хотите знать, что не распространяется на документацию? –

+7

Я пришел сюда, потому что я использую чужой make-файл, а документация - это зверь, с которого можно начать. Хороший вопрос на StackOverflow, чтобы найти легкий ответ от google. – GreenAsJade

ответ

64

Из docs:

-g

Produce отладочной информации в родном формате операционной системы (уколы, 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.

+5

Можно еще объяснить, в чем разница между, например, «наиболее выразительным форматом» и «дополнительной информацией»? Являются ли эти параметры бесплатными? Многие из них упоминают GDB ... Спасибо! – rogerdpack

8

Т.Л., д-р: Чтобы ответить на конкретный вопрос, -g3 «включает в себя дополнительную информацию, такую ​​как макроопределений Некоторые отладчики поддерживают макрораскрытие при использовании -g3.», В то время как -g нет.

Более общий ответ: gcc поддерживает четыре уровня отладочной информации: от -g0 (отладочная информация отключена) через -g3 (максимальная информация об отладке).

Заказание -g равнозначно -g2. Любопытно, что gcc docs мало говорят о том, какая информация -g/-g2 включает или исключает.

Запросить информацию об отладке, а также использовать уровень, чтобы указать, сколько информации. Уровень по умолчанию - 2. Уровень 0 не генерирует отладочную информацию. Таким образом, -g0 отрицает -g.

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

Уровень 3 включает дополнительную информацию, такую ​​как все макроопределения, присутствующие в программе. Некоторые отладчики поддерживают расширение макросов при использовании -g3.

 Смежные вопросы

  • Нет связанных вопросов^_^