Флаг gcc-g vs-g3 GDB: в чем разница?


при компиляции исходного кода C с помощью gcc или Clang я всегда использую -g флаг для создания отладочной информации для gdb.

gcc -g -o helloworld helloworld.c

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

2 69

2 ответа:

с docs:

- g

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

...


- ggdb

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


-gvmslevel

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

....

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

tl; dr: чтобы ответить на ваш конкретный вопрос, -g3 " включает дополнительную информацию, такую как определения макросов. Некоторые отладчики поддерживают расширение макросов при использовании -g3", а -g не включает эту дополнительную информацию.

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

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

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

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

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