Spec-Zone.ru › GCC 11

Далее: Параметры, управляющие оптимизацией, Предыдущее: Параметры, управляющие статическим анализом, Наверх: Командные параметры 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; по умолчанию для большинства целей используется версия 5 (за исключением VxWorks, TPF и Darwin/Mac OS X, для которых используется версия 2, и AIX, для которой используется версия 4).

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

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

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.

-gdwarf32
-gdwarf64

Если включена отладочная информация DWARF, -gdwarf32 выбирает 32-разрядный формат DWARF, а -gdwarf64 — 64-разрядный. По умолчанию это зависит от целевой платформы, на большинстве платформ это -gdwarf32. 32-разрядный формат DWARF меньше, но не может поддерживать более 2 ГБ отладочной информации в любом из разделов отладочной информации DWARF. 64-разрядный формат DWARF позволяет использовать более объёмную отладочную информацию и может пока не поддерживаться всеми потребителями.

-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

Принудительно сгенерировать таблицы номеров строк DWARF2+ внутри GCC, если должны быть сгенерированы таблицы номеров строк 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-11.4.0/gcc/Debugging-Options.html

Spec-Zone.ru

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