Spec-Zone.ru › GCC 7

3.9 Варианты отладки вашей программы

Чтобы сообщить GCC о необходимости выдачи дополнительной информации для использования отладчиком, практически во всех случаях достаточно добавить -g к вашим другим параметрам.

GCC позволяет использовать -g с -O. Сокращения, применяемые оптимизированным кодом, иногда могут быть неожиданными: некоторые объявленные вами переменные могут вообще не существовать; поток управления может временно переместиться в место, которого вы не ожидали; некоторые операторы могут не выполняться, потому что они вычисляют константные результаты или их значения уже известны; некоторые операторы могут выполняться в разных местах, потому что они были перемещены из циклов. Тем не менее, отладка оптимизированного вывода возможна. Это делает разумным использование оптимизатора для программ, которые могут содержать ошибки.

Если вы не используете какой-либо другой параметр оптимизации, рассмотрите использование -Og (см. Параметры оптимизации) вместе с -g. При отсутствии параметра -O вообще некоторые этапы компиляции, собирающие информацию, полезную для отладки, не выполняются, поэтому использование -Og может привести к улучшенному опыту отладки.

-g

Произвести отладочную информацию в родном формате операционной системы (stabs, COFF, XCOFF или DWARF). GDB может работать с этой отладочной информацией.

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

-ggdb

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

-gdwarf
-gdwarf-version

Произвести отладочную информацию в формате DWARF (если это поддерживается). Значение version может быть 2, 3, 4 или 5; значение по умолчанию для большинства целей — 4. Версия DWARF 5 находится только в стадии эксперимента.

Обратите внимание, что с DWARF версии 2 некоторые порты требуют и всегда используют некоторые неконфликтующие расширения DWARF 3 в таблицах разворачивания.

Для максимальной пользы версия 4 может потребовать GDB 7.0 и -fvar-tracking-assignments.

GCC больше не поддерживает DWARF версии 1, которая существенно отличается от версии 2 и более поздних. По историческим причинам некоторые другие связанные с DWARF параметры (включая -feliminate-dwarf2-dups и -fno-dwarf2-cfi-asm) сохраняют ссылку на DWARF версии 2 в своих именах, но относятся ко всем в настоящее время поддерживаемым версиям DWARF.

-gstabs

Произвести отладочную информацию в формате stabs (если он поддерживается), без расширений GDB. Это формат, используемый DBX на большинстве систем BSD. На системах MIPS, Alpha и System V Release 4 этот параметр генерирует отладочный вывод stabs, который не понимается DBX или SDB. На системах System V Release 4 этот параметр требует GNU ассемблера.

-gstabs+

Произвести отладочную информацию в формате stabs (если он поддерживается), используя расширения GNU, понимаемые только GNU отладчиком (GDB). Использование этих расширений, вероятно, заставит другие отладчики аварийно завершиться или откажутся читать программу.

-gcoff

Произвести отладочную информацию в формате COFF (если он поддерживается). Это формат, используемый SDB на большинстве систем System V до System V Release 4.

-gxcoff

Произвести отладочную информацию в формате XCOFF (если он поддерживается). Это формат, используемый отладчиком DBX на системах IBM RS/6000.

-gxcoff+

Произвести отладочную информацию в формате XCOFF (если он поддерживается), используя расширения GNU, понимаемые только GNU отладчиком (GDB). Использование этих расширений, вероятно, заставит другие отладчики аварийно завершиться или откажутся читать программу, а также может привести к ошибке ассемблеров, отличных от GNU ассемблера (GAS).

-gvms

Произвести отладочную информацию в формате отладки Alpha/VMS (если он поддерживается). Это формат, используемый отладчиком DEBUG на системах Alpha/VMS.

-glevel
-ggdblevel
-gstabslevel
-gcofflevel
-gxcofflevel
-gvmslevel

Запрос отладочной информации и также использование level для указания количества информации. Уровень по умолчанию — 2.

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

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

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

-gdwarf не принимает объединённый уровень отладки, чтобы избежать путаницы с -gdwarf-level. Вместо этого используйте дополнительный параметр -glevel для изменения уровня отладки для DWARF.

-feliminate-unused-debug-symbols

Произвести отладочную информацию в формате stabs (если он поддерживается), только для символов, которые фактически используются.

-femit-class-debug-always

Вместо вывода отладочной информации для класса C++ только в одном объекте файла, выводить её во всех объектных файлах, использующих этот класс. Этот параметр следует использовать только с отладчиками, которые не могут обрабатывать способ, которым GCC обычно генерирует отладочную информацию для классов, потому что использование этого параметра увеличивает размер отладочной информации в два раза.

-fno-merge-debug-strings

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

-fdebug-prefix-map=old=new

При компиляции файлов в каталоге old, записывать отладочную информацию, описывающую их, как в new вместо этого.

-fvar-tracking

Запустить проход отслеживания переменных. Он вычисляет, где хранятся переменные в каждой позиции в коде. Затем генерируется лучшая отладочная информация (если формат отладочной информации поддерживает эту информацию).

Он включён по умолчанию при компиляции с оптимизацией (-Os, -O, -O2, …), отладочной информацией (-g) и если формат отладочной информации её поддерживает.

-fvar-tracking-assignments

Ранняя аннотация присваиваний пользователю переменных во время компиляции и попытка распространить аннотации на протяжении всей компиляции до конца, в попытке улучшить отладочную информацию при оптимизации. Вместе с ним рекомендуется использовать -gdwarf-4.

Он может быть включён, даже если отслеживание переменных отключено, в этом случае аннотации создаются и поддерживаются, но отбрасываются в конце. По умолчанию этот флаг включён вместе с -fvar-tracking, за исключением случаев включения выборочного планирования.

-gsplit-dwarf

Разделить как можно больше отладочной информации DWARF в отдельный выходной файл с расширением .dwo. Этот параметр позволяет системе сборки избежать линковки файлов с отладочной информацией. Для его полезного использования требуется отладчик, способный читать файлы .dwo.

-gpubnames

Сгенерировать DWARF .debug_pubnames и .debug_pubtypes секции.

-ggnu-pubnames

Сгенерировать .debug_pubnames и .debug_pubtypes секции в формате, подходящем для преобразования в индекс GDB. Этот параметр полезен только с линком, который может генерировать индекс GDB версии 7.

-fdebug-types-section

При использовании DWARF версии 4 или выше, DIE типов могут быть помещены в свою собственную .debug_types секцию вместо того, чтобы быть частью .debug_info секции. Более эффективно помещать их в отдельные секции comdat, так как линковщик может затем удалить дубликаты. Но не все потребители DWARF пока не поддерживают .debug_types секции и в некоторых объектах .debug_types производит более крупные, а не меньшие, отладочные данные.

-grecord-gcc-switches
-gno-record-gcc-switches

Этот параметр вызывает добавление командной строки, используемой для вызова компилятора, которые могут повлиять на генерацию кода, к атрибуту DW_AT_producer в отладочной информации DWARF. Параметры объединяются пробелами, разделяющими их друг от друга и от версии компилятора. Он включён по умолчанию. См. также -frecord-gcc-switches для другого способа хранения параметров компилятора в объектный файл.

-gstrict-dwarf

Запретить использование расширений более поздней версии стандарта DWARF, чем выбранная с -gdwarf-version. На большинстве целей разрешено использование неконфликтных расширений DWARF из более поздних версий стандарта.

-gno-strict-dwarf

Разрешить использование расширений более поздней версии стандарта DWARF, чем выбранная с -gdwarf-version.

-gcolumn-info
-gno-column-info

Вывести информацию о столбцах расположения в отладочную информацию DWARF, а не только файл и строку. Этот параметр отключён по умолчанию.

-gz[=type]

Произвести сжатые отладочные секции в формате DWARF, если это поддерживается. Если type не задан, тип по умолчанию зависит от возможностей используемого ассемблера и линкера. type может быть одним из ‘none’ (не сжимать отладочные секции), ‘zlib’ (использовать сжатие zlib в формате ELF gABI) или ‘zlib-gnu’ (использовать сжатие zlib в традиционном формате GNU). Если линковщик не поддерживает запись сжатых отладочных секций, параметр отклоняется. В противном случае, если ассемблер не поддерживает их, -gz молча игнорируется при создании объектных файлов.

-feliminate-dwarf2-dups

Сжать отладочную информацию DWARF, удалив дублированную информацию о каждом символе. Этот параметр имеет смысл только при генерации отладочной информации DWARF.

-femit-struct-debug-baseonly

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

Этот параметр существенно уменьшает размер отладочной информации, но с существенным потенциальным утерей информации о типе для отладчика. См. -femit-struct-debug-reduced для менее агрессивного параметра. См. -femit-struct-debug-detailed для более детального управления.

Этот параметр работает только с отладочным выводом DWARF.

-femit-struct-debug-reduced

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

Этот параметр значительно уменьшает размер отладочной информации с некоторым потенциальным утерей информации о типе для отладчика. См. -femit-struct-debug-baseonly для более агрессивного параметра. См. -femit-struct-debug-detailed для более детального управления.

Этот параметр работает только с отладочным выводом DWARF.

-femit-struct-debug-detailed[=spec-list]

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

Этот параметр является расширенной версией -femit-struct-debug-reduced и -femit-struct-debug-baseonly, которая удовлетворяет большинству потребностей.

Спецификация имеет синтаксис [‘dir:’|‘ind:’][‘ord:’|‘gen:’](‘any’|‘sys’|‘base’|‘none’)

Необязательное первое слово ограничивает спецификацию структурами, которые используются непосредственно (‘dir:’) или косвенно (‘ind:’). Тип структуры используется непосредственно, когда он является типом переменной или члена. Косвенное использование возникает через указатели на структуры. То есть, когда использование неполной структуры допустимо, использование является косвенным. Пример: ‘struct one direct; struct two * indirect;’.

Необязательное второе слово ограничивает спецификацию обычными структурами (‘ord:’) или обобщенными структурами (‘gen:’). Обобщенные структуры немного сложнее объяснить. Для C++ это неявные специализации шаблонов классов или нешаблонные классы в рамках вышеуказанного. Другие языки программирования также имеют обобщенные типы, но -femit-struct-debug-detailed еще не реализует их.

Третье слово указывает исходные файлы для тех структур, для которых компилятор должен выводить отладочную информацию. Значения ‘none’ и ‘any’ имеют обычное значение. Значение ‘base’ означает, что основание имени файла, в котором появляется объявление типа, должно совпадать с основанием имени основного файла компиляции. На практике это означает, что при компиляции foo.c, отладочная информация генерируется для типов, объявленных в этом файле и foo.h, но не в других заголовочных файлах. Значение ‘sys’ означает, что эти типы удовлетворяют условию ‘base’ или объявлены в системных или компиляторных заголовочных файлах.

Возможно, вам потребуется провести эксперименты, чтобы определить лучшие настройки для вашего приложения.

Значение по умолчанию — -femit-struct-debug-detailed=all.

Этот параметр работает только с отладочным выводом DWARF.

-fno-dwarf2-cfi-asm

Выводить информацию об unwinding DWARF в качестве сгенерированного компилятором .eh_frame раздела вместо использования директив GAS .cfi_*.

-fno-eliminate-unused-debug-types

Обычно при создании вывода DWARF GCC избегает создания отладочных символов для типов, которые нигде не используются в компилируемом исходном файле. Иногда полезно заставить GCC генерировать отладочную информацию для всех типов, объявленных в единице компиляции, независимо от того, используются ли они в этой единице компиляции или нет, например, если в отладчике вы хотите преобразовать значение к типу, который фактически не используется в вашей программе (но объявлен). Однако чаще это приводит к существенному увеличению занимаемого места.

Далее: Параметры оптимизации, Предыдущее: Параметры предупреждений, Наверх: Вызов GCC [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Debugging-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API