При компиляции исходного кода C с помощью gcc или Clang я всегда использую этот -g
флаг для генерации отладочной информации для gdb.
gcc -g -o helloworld helloworld.c
Я заметил, что некоторые рекомендуют -g3
вместо этого. В чем разница между -g
и -g3
флагами? Также есть разница между -g
и -ggdb
?
Ответы:
Из документов :
источник
tl; dr: Чтобы ответить на ваш конкретный вопрос,
-g3
«включает дополнительную информацию, такую как определения макросов ... Некоторые отладчики поддерживают расширение макросов, когда вы используете-g3
», а-g
не включает эту дополнительную информацию.Более широкий ответ заключается в том, что gcc поддерживает четыре уровня отладочной информации, от
-g0
(отладочная информация отключена) до-g3
(максимальная отладочная информация).Указание
-g
эквивалентно-g2
. Любопытно, что в документации gcc мало говорится о том, какая информация-g
/-g2
включает или исключает:источник