Spec-Zone.ru › GCC 10

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

3.10 Параметры для отладки вашей программы ¶

Для того, чтобы 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 параметры, такие как -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.

-fno-eliminate-unused-debug-symbols

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

-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++ это неявные специализации шаблонов классов или классы без шаблонов в вышеуказанном. Другие языки программирования имеют обобщения, но -femit-struct-debug-detailed ещё не реализует их.

Третье слово указывает файлы исходного кода для этих структур, для которых компилятор должен выводить отладочную информацию. Значения ‘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-10.5.0/gcc/Debugging-Options.html

Spec-Zone.ru

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