tl; dr: Чтобы ответить на ваш конкретный вопрос, -g3
«включает дополнительную информацию, такую как определения макросов ... Некоторые отладчики поддерживают расширение макросов, когда вы используете -g3
», а -g
не включает эту дополнительную информацию.
Более широкий ответ заключается в том, что gcc поддерживает четыре уровня отладочной информации, от -g0
(отладочная информация отключена) до -g3
(максимальная отладочная информация).
Указание -g
эквивалентно -g2
. Любопытно, что в документации gcc мало говорится о том, какая информация -g
/ -g2
включает или исключает:
Запросите информацию об отладке, а также используйте уровень, чтобы указать, сколько информации. Уровень по умолчанию - 2. Уровень 0 не дает никакой отладочной информации. Таким образом, -g0 отрицает -g.
Уровень 1 предоставляет минимальный объем информации, достаточный для отслеживания тех частей программы, которые вы не планируете отлаживать. Сюда входят описания функций и внешних переменных, а также таблицы номеров строк, но нет информации о локальных переменных.
Уровень 3 включает дополнительную информацию, такую как все определения макросов, присутствующие в программе. Некоторые отладчики поддерживают расширение макроса при использовании -g3.