Spec-Zone.ru › GCC 9

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. Версия 5 DWARF находится на экспериментальной стадии.

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

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

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

-gstabs

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

-gstabs+

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

-gxcoff

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

-gxcoff+

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

-gvms

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

-glevel
-ggdblevel
-gstabslevel
-gxcofflevel
-gvmslevel

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

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

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

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

Если вы используете несколько параметров -g с номерами уровней или без них, эффективным будет последний такой параметр.

-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. Это можно использовать для замены пути времени компиляции путём времени установки в отладочной информации. Также его можно использовать для изменения абсолютного пути на относительный, используя . для new. Это может дать более воспроизводимые сборки, независимые от местоположения, но может потребовать дополнительную команду для указания GDB места нахождения исходных файлов. См. также -ffile-prefix-map.

-fvar-tracking

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

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

-fvar-tracking-assignments

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

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

-gsplit-dwarf

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

-gdescribe-dies

Добавлять атрибуты описания некоторым DWARF DIE, не имеющим атрибута имени, таким как искусственные переменные, внешние ссылки и DIE параметров места вызова.

-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.

-gas-loc-support

Сообщить компилятору, что ассемблер поддерживает .loc директивы. Это может позволить ему использовать их для генерации таблиц номеров строк DWARF2+.

Это обычно желательно, так как сгенерированные ассемблером таблицы номеров строк значительно компактнее, чем таблицы, которые может сгенерировать сам компилятор.

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

-gno-as-loc-support

Принудительно заставить GCC генерировать таблицы номеров строк DWARF2+ внутри, если должны быть сгенерированы таблицы номеров строк DWARF2+.

gas-locview-support

Сообщить компилятору, что ассемблер поддерживает view назначение и проверку утверждения сброса в .loc директивах.

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

gno-as-locview-support

Принудительно заставить GCC назначать номера представлений внутри, если явно запрошены -gvariable-location-views.

-gcolumn-info
-gno-column-info

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

-gstatement-frontiers
-gno-statement-frontiers

Этот параметр заставляет GCC создавать метки во внутренней представлении в начале операторов и сохранять их примерно в исходном положении на протяжении всего процесса компиляции, используя их для управления выводом маркеров is_stmt в таблице номеров строк. Он включён по умолчанию при компиляции с оптимизацией (-Os, -O, -O2, …), а также при выводе отладочной информации DWARF 2 на стандартном уровне.

-gvariable-location-views
-gvariable-location-views=incompat5
-gno-variable-location-views

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

Этот параметр включён по умолчанию при выводе отладочной информации DWARF 2 на стандартном уровне, при условии наличия поддержки ассемблером, включении -fvar-tracking-assignments и отсутствии -gstrict-dwarf. Если поддержка ассемблером отсутствует, этот параметр всё равно может быть включён, но он заставит GCC вывести внутренние таблицы номеров строк, и если -ginternal-reset-location-views не включен, это почти наверняка приведёт к несоответствию представлений расположений.

Предложено представление для номеров представлений, несовместимое с форматом списков расположения, введённым в DWARF 5, которое можно включить с помощью -gvariable-location-views=incompat5. Этот параметр может быть удалён в будущем, он предоставлен только как эталонная реализация предложенного представления. От потребителей отладочной информации не ожидается поддержка этого расширенного формата, и они окажутся неспособными декодировать списки расположений, использующие его.

-ginternal-reset-location-views
-gno-internal-reset-location-views

Попытка определить представления расположений, которые можно опустить из списков представлений расположений. Для этого компилятору необходимы очень точные оценки длин инструкций, что не всегда возможно, и это может привести к молчаливому генерации неверных списков представлений при использовании ассемблера, не поддерживающего списки представлений расположений. Ассемблер GNU будет отмечать любую такую ошибку как view number mismatch. Этот параметр включён только на портах, определяющих надёжную функцию оценки.

-ginline-points
-gno-inline-points

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

-gz[=type]

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

-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++, это неявные специализации классов шаблонов или нешаблонные классы в вышеуказанных.

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

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

По умолчанию -femit-struct-debug-detailed=all.

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

-fno-dwarf2-cfi-asm

Выводить отладочную информацию 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-9.5.0/gcc/Debugging-Options.html

Spec-Zone.ru

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