3.17 Параметры GCC для разработчиков
В этом разделе описаны параметры командной строки, которые в первую очередь интересны разработчикам GCC, включая параметры для поддержки тестирования компилятора и исследования ошибок компилятора, а также проблем производительности во время компиляции. Это включает параметры, которые генерируют дампы отладки в различные моменты компиляции; выводят статистику, такую как использование памяти и время выполнения; и выводят информацию о конфигурации GCC, например, о том, где он ищет библиотеки. Вам редко нужно использовать какие-либо из этих параметров для обычных задач компиляции и компоновки.
-dletters-fdump-rtl-pass-fdump-rtl-pass=filename-
Указывает на создание отладочных дампов во время компиляции в моменты, указанные параметром letters. Используется для отладки проходов компилятора, основанных на RTL. Имена файлов для большинства дампов формируются путём добавления номера прохода и слова к dumpname, а файлы создаются в директории выходного файла. В случае опции =filename дамп выводится в указанный файл вместо файлов дампов с номерами проходов. Обратите внимание, что номер прохода назначается при регистрации проходов в менеджере проходов. Большинство проходов регистрируются в порядке их выполнения, и для этих проходов номер соответствует порядку выполнения прохода. Однако проходы, зарегистрированные плагинами, проходы, специфичные для целей компиляции, или проходы, зарегистрированные после всех остальных проходов, имеют номера, большие, чем у прохода с именем "final", даже если они выполняются раньше. dumpname генерируется из имени выходного файла, если он явно указан и не является исполняемым файлом, в противном случае это имя файла без пути исходного файла.
Некоторые переключатели -dletters имеют другое значение, когда используется -E для предобработки. См. Параметры предобработки для получения информации о параметрах дампов, специфичных для предобработки.
Отладочные дампы можно включить с помощью переключателя -fdump-rtl или некоторых опций -d letters. Ниже приведены возможные буквы для использования в pass и letters, и их значения:
-fdump-rtl-alignments-
Дамп после вычисления выравнивания ветвей.
-fdump-rtl-asmcons-
Дамп после исправления инструкций RTL, у которых не удовлетворены входные/выходные ограничения.
-fdump-rtl-auto_inc_dec-
Дамп после обнаружения автоинкремента/декремента. Этот проход выполняется только на архитектурах, имеющих инструкции автоинкремента или автодекремента.
-fdump-rtl-barriers-
Дамп после обработки инструкций барьеров.
-fdump-rtl-bbpart-
Дамп после разбиения горячих и холодных основных блоков.
-fdump-rtl-bbro-
Дамп после переупорядочивания блоков.
-fdump-rtl-btl1-fdump-rtl-btl2-
-fdump-rtl-btl1 и -fdump-rtl-btl2 включают дамп после двух проходов оптимизации загрузки целевых адресов ветвей.
-fdump-rtl-bypass-
Дамп после оптимизации обхода прыжков и потока управления.
-fdump-rtl-combine-
Дамп после прохода объединения инструкций RTL.
-fdump-rtl-compgotos-
Дамп после дублирования вычисленных переходов.
-fdump-rtl-ce1-fdump-rtl-ce2-fdump-rtl-ce3-
-fdump-rtl-ce1, -fdump-rtl-ce2 и -fdump-rtl-ce3 включают дамп после трёх проходов преобразования условий if.
-fdump-rtl-cprop_hardreg-
Дамп после распространения копирования регистров.
-fdump-rtl-csa-
Дамп после объединения корректировок стека.
-fdump-rtl-cse1-fdump-rtl-cse2-
-fdump-rtl-cse1 и -fdump-rtl-cse2 включают дамп после двух проходов устранения общих подвыражений.
-fdump-rtl-dce-
Дамп после проходов устранения неиспользуемого кода.
-fdump-rtl-dbr-
Дамп после планирования отложенных ветвей.
-fdump-rtl-dce1-fdump-rtl-dce2-
-fdump-rtl-dce1 и -fdump-rtl-dce2 включают дамп после двух проходов устранения неиспользуемых сохранений.
-fdump-rtl-eh-
Дамп после завершения обработки EH (Exceptional Handling).
-fdump-rtl-eh_ranges-
Дамп после преобразования областей диапазонов EH.
-fdump-rtl-expand-
Дамп после генерации RTL.
-fdump-rtl-fwprop1-fdump-rtl-fwprop2-
-fdump-rtl-fwprop1 и -fdump-rtl-fwprop2 включают дамп после двух проходов прямого распространения.
-fdump-rtl-gcse1-fdump-rtl-gcse2-
-fdump-rtl-gcse1 и -fdump-rtl-gcse2 включают дамп после глобального устранения общих подвыражений.
-fdump-rtl-init-regs-
Дамп после инициализации регистров.
-fdump-rtl-initvals-
Дамп после вычисления начальных наборов значений.
-fdump-rtl-into_cfglayout-
Дамп после перехода в режим cfglayout.
-fdump-rtl-ira-
Дамп после итеративного распределения регистров.
-fdump-rtl-jump-
Дамп после второй оптимизации прыжков.
-fdump-rtl-loop2-
-fdump-rtl-loop2 включает дамп после проходов RTL оптимизации циклов.
-fdump-rtl-mach-
Дамп после выполнения зависимого от машины прохода реорганизации, если такой проход существует.
-fdump-rtl-mode_sw-
Дамп после удаления избыточных переключений режимов.
-fdump-rtl-rnreg-
Дамп после переименования регистров.
-fdump-rtl-outof_cfglayout-
Дамп после выхода из режима cfglayout.
-fdump-rtl-peephole2-
Дамп после прохода peephole.
-fdump-rtl-postreload-
Дамп после пост-перезагрузки оптимизаций.
-fdump-rtl-pro_and_epilogue-
Дамп после генерации прологов и эпилогов функций.
-fdump-rtl-sched1-fdump-rtl-sched2-
-fdump-rtl-sched1 и -fdump-rtl-sched2 включают дамп после проходов планирования основных блоков.
-fdump-rtl-ree-
Дамп после устранения расширения знака/нуля.
-fdump-rtl-seqabstr-
Дамп после обнаружения общих последовательностей.
-fdump-rtl-shorten-
Дамп после укорачивания ветвей.
-fdump-rtl-sibling-
Дамп после оптимизаций вызовов братьев.
-fdump-rtl-split1-fdump-rtl-split2-fdump-rtl-split3-fdump-rtl-split4-fdump-rtl-split5-
Эти параметры включают дамп после пяти раундов разделения инструкций.
-fdump-rtl-sms-
Дамп после модульного планирования. Этот проход выполняется только на некоторых архитектурах.
-fdump-rtl-stack-
Дамп после преобразования регистров GCC «плоского файла регистров» в стековые регистры x87. Этот проход выполняется только на вариантах x86.
-fdump-rtl-subreg1-fdump-rtl-subreg2-
-fdump-rtl-subreg1 и -fdump-rtl-subreg2 включают дамп после двух проходов расширения подрегистров.
-fdump-rtl-unshare-fdump-rtl-vartrack-
Дамп после отслеживания переменных.
-fdump-rtl-vregs-
Дамп после преобразования виртуальных регистров в реальные регистры.
-fdump-rtl-web-
Дамп после разделения диапазонов жизни.
-fdump-rtl-regclass-fdump-rtl-subregs_of_mode_init-fdump-rtl-subregs_of_mode_finish-fdump-rtl-dfinit-fdump-rtl-dfinish-
Эти дампы определены, но всегда производят пустые файлы.
-da-fdump-rtl-all-
Создать все указанные выше дампы.
-dA-
Добавить в вывод ассемблера различные отладочные сведения.
-dD-
Вывести все определения макросов в конце предобработки, в дополнение к обычному выводу.
-dH-
Создавать дамп ядра при возникновении ошибки.
-dp-
Добавить в вывод ассемблера комментарий, указывающий, какой шаблон и альтернатива использовались. Также выводятся длина и стоимость каждой инструкции.
-dP-
Вывести RTL в выводе ассемблера как комментарий перед каждой инструкцией. Также включает аннотации -dp.
-dx-
Просто сгенерировать RTL для функции, вместо её компиляции. Обычно используется с -fdump-rtl-expand.
-fdump-noaddr-
При создании отладочных дампов подавить вывод адресов. Это делает более практичным использование diff на отладочных дампах для вызовов компилятора с разными бинарными файлами компилятора и/или разными начальными позициями текстовой, bss, данных, кучи, стека и dso.
-freport-bug-
Собрать и вывести отладочную информацию в временный файл, если произошла внутренняя ошибка компилятора (ICE).
-fdump-unnumbered-
При создании отладочных дампов подавить номера инструкций и вывод адресов. Это делает более практичным использование diff на отладочных дампах для вызовов компилятора с разными опциями, в частности с и без -g.
-fdump-unnumbered-links-
При создании отладочных дампов (см. опцию -d выше), подавить номера инструкций для ссылок на предыдущую и следующую инструкции в последовательности.
-fdump-ipa-switch
-
Управляйте выводом в файл на различных этапах анализа межпроцедурного языка дерева. Имя файла генерируется путем добавления специфичного для переключателя суффикса к имени исходного файла, а файл создается в той же директории, что и выходной файл. Возможны следующие выводы:
- ‘all’
-
Включает все выводы межпроцедурного анализа.
- ‘cgraph’
-
Выводит информацию об оптимизации вызова графа, удалении неиспользуемых функций и решениях инлайнинга.
- ‘inline’
-
Вывод после инлайнинга функций.
-fdump-lang-all-fdump-lang-switch-fdump-lang-switch-options-fdump-lang-switch-options=filename-
Управление выводом языка-специфической информации. Части options и filename ведут себя так, как описано в опции -fdump-tree. Принимаются следующие значения switch:
- ‘all’
-
Включить все выводы, специфичные для языка.
- ‘class’
-
Вывод информации о иерархии классов. Информация о виртуальных таблицах выводится, если не указан параметр ’slim’. Эта опция применима только к C++.
- ‘raw’
-
Вывод исходных данных внутреннего дерева. Эта опция применима только к C++.
-fdump-passes-
Вывод в stderr списка оптимизационных пасов, которые включены или выключены текущими параметрами командной строки.
-fdump-statistics-option-
Включить и управлять выводом статистики пасов в отдельный файл. Имя файла генерируется путем добавления суффикса, заканчивающегося на ‘.statistics’, к имени исходного файла, и файл создается в той же директории, что и выходной файл. Если используется форма ‘-option’, ‘-stats’ вызывает суммирование счетчиков по всему блоку компиляции, а ‘-details’ выводит каждое событие по мере их генерации пасами. По умолчанию, без опции, счетчики суммируются для каждой скомпилированной функции.
-fdump-tree-all-fdump-tree-switch-fdump-tree-switch-options-fdump-tree-switch-options=filename-
Управление выводом в файл на различных этапах обработки промежуточного дерева языка. Имя файла генерируется путем добавления специфичного для переключателя суффикса к имени исходного файла, а файл создается в той же директории, что и выходной файл. В случае опции =filename вывод осуществляется в указанный файл вместо автоматически именованных файлов вывода. Если используется форма ‘-options’, options — список опций, разделенных ‘-’, которые контролируют детали вывода. Не все опции применимы ко всем выводам; те, которые не имеют смысла, игнорируются. Доступны следующие опции
- ‘address’
Печать адреса каждого узла. Обычно это не имеет смысла, так как оно меняется в зависимости от среды и исходного файла. Его основное применение — привязка файла вывода к среде отладки.
- ‘asmname’
Если
DECL_ASSEMBLER_NAMEбыло установлено для данного объявления, оно используется в выводе вместоDECL_NAME. Его основное применение — удобство работы, двигаясь вспять от запутаных имен в файле ассемблера.- ‘slim’
-
При выводе промежуточных представлений фронтального конца, запретить вывод членов области видимости или тела функции только потому, что эта область видимости достигнута. Выводить такие элементы только тогда, когда они напрямую доступны по какому-либо другому пути.
При выводе отформатированных деревьев эта опция запрещает вывод тел управляющих конструкций.
При выводе RTL, выводить RTL в форме slim (сжатой) вместо стандартного представления, подобного LISP.
- ‘raw’
Печать необработанного представления дерева. По умолчанию деревья выводятся в формате, похожем на C.
- ‘details’
Включить более подробные выводы (не поддерживаются каждой опцией вывода). Также включить информацию из оптимизационных пасов.
- ‘stats’
Включить вывод различных статистических данных о пасе (не поддерживается каждой опцией вывода).
- ‘blocks’
Включить показ границ основных блоков (отключено в необработанных выводах).
- ‘graph’
-
Для каждого из указанных файлов вывода (-fdump-rtl-pass) вывести представление графа потока управления, подходящее для просмотра с помощью GraphViz в file.passid.pass.dot. Каждая функция в файле выводится как подграф, чтобы GraphViz мог отобразить их все на одном графике.
Эта опция в настоящее время работает только для вывода RTL, а RTL всегда выводится в формате slim.
- ‘vops’
Включить показ виртуальных операндов для каждого оператора.
- ‘lineno’
Включить показ номеров строк для операторов.
- ‘uid’
Включить отображение уникального идентификатора (
DECL_UID) для каждой переменной.- ‘verbose’
Включить вывод дерева для каждого оператора.
- ‘eh’
Включить отображение номера области EH, содержащей каждый оператор.
- ‘scev’
Включить показ деталей анализа скалярной эволюции.
- ‘optimized’
Включить отображение информации об оптимизации (доступно только в определенных пасах).
- ‘missed’
Включить отображение информации об упущенных возможностях оптимизации (доступно только в определенных пасах).
- ‘note’
Включить другую подробную информацию об оптимизации (доступно только в определенных пасах).
- ‘=filename’
-
Вместо автоматически сгенерированного файла вывода, вывести в указанное имя файла. Файлы stdout и stderr обрабатываются особым образом и считаются открытыми стандартными потоками. Например,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump -fdump-tree-pre=/dev/stderr file.cвыводит вывод векторизации в foo.dump, а вывод PRE — в stderr. Если для одного и того же пасса заданы два конфликтующих имени файлов вывода, то последняя опция переопределяет предыдущую.
- ‘all’
-
Включить все опции, кроме raw, slim, verbose и lineno.
- ‘optall’
Включить все опции оптимизации, т.е., optimized, missed и note.
Для определения доступных выводов дерева или поиска вывода для интересующего паса следуйте шагам ниже.
- Вызовите GCC с -fdump-passes и в выводе stderr найдите код, соответствующий интересующему вас пасу. Например, коды
tree-evrp,tree-vrp1, иtree-vrp2соответствуют трём пасам распространения диапазонов значений. Цифра в конце отличает отдельные вызовы одного и того же паса. - Чтобы включить создание файла вывода, добавьте код паса к префиксу опции -fdump- и вызовите GCC с ней. Например, чтобы включить вывод из раннего паса распространения диапазонов значений, вызовите GCC с опцией -fdump-tree-evrp. Необязательно, вы можете указать имя файла вывода. Если вы не укажете, GCC создаст его, как описано ниже.
- Найдите вывод паса в файле, имя которого состоит из трёх компонентов, разделённых точкой: имя исходного файла, вызванного GCC для компиляции, числовой суффикс, обозначающий номер паса, за которым следует буква ‘t’ для пасов дерева (и буква ‘r’ для пасов RTL), и, наконец, код паса. Например, вывод паса раннего распространения VRP может быть в файле с именем myfile.c.038t.evrp в текущем каталоге. Обратите внимание, что числовые коды нестабильны и могут изменяться в разных версиях GCC.
-fopt-info-fopt-info-options-fopt-info-options=filename
-
Управляет выводом оптимизационных дампов из различных проходов оптимизации. Если используется форма «-options», options представляет собой список ключевых слов опций, разделённых символом «-», для выбора подробностей дампов и оптимизаций.
Параметр options можно разделить на две группы: опции, описывающие подробность вывода дампов, и опции, описывающие, какие оптимизации следует включить. Опции из обеих групп можно свободно смешивать, так как они не перекрываются. Однако, в случае конфликтов, более поздние опции на командной строке переопределяют более ранние.
Следующие опции управляют подробностью вывода дампов:
- ‘optimized’
Выводит информацию, когда оптимизация успешно применена. Отдельного прохода зависит, какая информация уместна. Например, проходы векторизации печатают местоположение в исходном коде петель, которые успешно векторизированы.
- ‘missed’
Выводит информацию об пропущенных оптимизациях. Отдельные проходы управляют, какую информацию включать в вывод.
- ‘note’
Выводит подробную информацию об оптимизациях, таких как определённые преобразования, более подробные сообщения о решениях и т. д.
- ‘all’
Выводит подробную информацию об оптимизациях. Это включает ‘optimized’, ‘missed’ и ‘note’.
Можно использовать одно или несколько следующих ключевых слов опций для описания группы оптимизаций:
- ‘ipa’
Включает дампы всех межпроцедурных оптимизаций.
- ‘loop’
Включает дампы всех оптимизаций петель.
- ‘inline’
Включает дампы всех оптимизаций встраивания.
- ‘omp’
Включает дампы всех оптимизаций OMP (Offloading and Multi Processing).
- ‘vec’
Включает дампы всех оптимизаций векторизации.
- ‘optall’
Включает дампы всех оптимизаций. Это надмножество перечисленных выше групп оптимизаций.
Если options опущено, по умолчанию используется ‘optimized-optall», что означает вывод всей информации об успешных оптимизациях всех проходов.
Если указан filename, дампы всех применимых оптимизаций конкатенируются в filename. В противном случае дамп выводится в stderr. Хотя принимаются несколько опций -fopt-info, только одна из них может включать filename. Если указаны другие имена файлов, все, кроме первого, игнорируются.
Обратите внимание, что выходной filename перезаписывается в случае нескольких единиц трансляции. Если требуется объединённый вывод из нескольких единиц трансляции, следует использовать stderr вместо этого.
В следующем примере информация об оптимизации выводится в stderr:
gcc -O3 -fopt-info
Этот пример:
gcc -O3 -fopt-info-missed=missed.all
выводит отчёт о пропущенных оптимизациях из всех проходов в missed.all, а этот:
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
печатает информацию о пропущенных возможностях оптимизации из проходов векторизации в stderr. Обратите внимание, что -fopt-info-vec-missed эквивалентно -fopt-info-missed-vec. Порядок имён групп оптимизаций и типов сообщений, указанных после -fopt-info, не имеет значения.
Ещё один пример:
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
выводит информацию о пропущенных оптимизациях, а также о местах оптимизированных из всех проходов встраивания в inline.txt.
Наконец, рассмотрим:
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
Здесь два выходных имени файлов vec.miss и loop.opt находятся в конфликте, так как разрешён только один выходной файл. В этом случае действует только первая опция, а последующие игнорируются. Таким образом, создаётся только vec.miss, который содержит дампы векторизатора о пропущенных возможностях.
-fsched-verbose=n-
На целевых платформах, использующих планирование инструкций, эта опция управляет объёмом отладочного вывода, печатаемого планировщиком в файлы дампов.
Для n, большего нуля, -fsched-verbose выводит ту же информацию, что и -fdump-rtl-sched1 и -fdump-rtl-sched2. Для n, большего единицы, также выводятся вероятности базовых блоков, подробная информация о готовности списка и информация о блоках/инструкциях. Для n, большего двух, он включает RTL в точке прерывания, информацию о потоке управления и областях. А для n, превышающего четырёх, -fsched-verbose также включает информацию о зависимостях.
-fenable-kind-pass-fdisable-kind-pass=range-list-
Это набор опций, используемых для явного отключения/включения проходов оптимизации. Эти опции предназначены для использования при отладке GCC. Пользователи компилятора должны использовать стандартные опции для включения/отключения проходов вместо этого.
-fdisable-ipa-pass-
Отключает проход IPA pass. pass — имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода следует добавить порядковый номер, начиная с 1.
-fdisable-rtl-pass-fdisable-rtl-pass=range-list-
Отключает проход RTL pass. pass — имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода следует добавить порядковый номер, начиная с 1. range-list — список диапазонов функций или имён ассемблерных команд, разделённых запятыми. Каждый диапазон — пара чисел, разделённых двоеточием. Диапазон включительно в обоих концах. Если диапазон тривиален, пару чисел можно упростить до одного числа. Если узел узла вызова функции в графе вызовов uid попадает в один из указанных диапазонов, проход pass отключается для этой функции. uid показан в заголовке функции файла дампов, а имена проходов можно вывести с помощью опции -fdump-passes.
-fdisable-tree-pass-fdisable-tree-pass=range-list-
Отключает проход дерева pass. См. -fdisable-rtl для описания аргументов опции.
-fenable-ipa-pass-
Включает проход IPA pass. pass — имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода следует добавить порядковый номер, начиная с 1.
-fenable-rtl-pass-fenable-rtl-pass=range-list-
Включает проход RTL pass. См. -fdisable-rtl для описания аргументов опции и примеров.
-fenable-tree-pass-fenable-tree-pass=range-list-
Включает проход дерева pass. См. -fdisable-rtl для описания аргументов опции.
Вот несколько примеров, показывающих использование этих опций.
# disable ccp1 for all functions -fdisable-tree-ccp1 # disable complete unroll for function whose cgraph node uid is 1 -fenable-tree-cunroll=1 # disable gcse2 for functions at the following ranges [1,1], # [300,400], and [400,1000] # disable gcse2 for functions foo and foo2 -fdisable-rtl-gcse2=foo,foo2 # disable early inlining -fdisable-tree-einline # disable ipa inlining -fdisable-ipa-inline # enable tree full unroll -fenable-tree-unroll
-fchecking-fchecking=n-
Включает проверку внутренней согласованности. Значение по умолчанию зависит от конфигурации компилятора. -fchecking=2 включает дополнительные проверки внутренней согласованности, которые могут повлиять на генерацию кода.
-frandom-seed=string-
Эта опция предоставляет seed, который GCC использует вместо случайных чисел при генерации определённых имён символов, которые должны быть различными в каждом скомпилированном файле. Она также используется для размещения уникальных меток в файлах данных покрытия и объектных файлах, которые их генерируют. Можно использовать опцию -frandom-seed для создания воспроизводимых идентичных объектных файлов.
Значение string может быть числом (десятичным, восьмеричным или шестнадцатеричным) или произвольной строкой (в этом случае она преобразуется в число путём вычисления CRC32).
Значение string должно отличаться для каждого компилируемого файла.
-save-temps-save-temps=cwd-
Постоянно хранит обычные временные промежуточные файлы; помещает их в текущий каталог и называет их, основываясь на исходном файле. Таким образом, компиляция foo.c с -c -save-temps создаёт файлы foo.i и foo.s, а также foo.o. Это создаёт файл препроцессированного foo.i, хотя компилятор теперь обычно использует встроенный препроцессор.
При использовании в сочетании с опцией командной строки -x, -save-temps достаточно разумно, чтобы избежать перезаписи исходного файла ввода с тем же расширением, что и промежуточный файл. Соответствующий промежуточный файл можно получить, переименовав исходный файл перед использованием -save-temps.
Если вы вызываете GCC параллельно, компилируя несколько различных исходных файлов, которые имеют общее имя файла в различных подкаталогах или один и тот же исходный файл, скомпилированный для нескольких выходных пунктов назначения, вероятно, что разные параллельные компиляторы будут мешать друг другу и перезаписывать временные файлы. Например:
gcc -save-temps -o outdir1/foo.o indir1/foo.c& gcc -save-temps -o outdir2/foo.o indir2/foo.c&
может привести к тому, что foo.i и foo.o будут записаны одновременно обоими компиляторами.
-save-temps=obj-
Постоянно хранит обычные временные промежуточные файлы. Если используется опция -o, временные файлы основаны на объектном файле. Если опция -o не используется, переключатель -save-temps=obj ведёт себя как -save-temps.
Например:
gcc -save-temps=obj -c foo.c gcc -save-temps=obj -c bar.c -o dir/xbar.o gcc -save-temps=obj foobar.c -o dir2/yfoobar
создаёт foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s и dir2/yfoobar.o.
-time[=file]-
Отчитывается о времени ЦП, затраченном каждым подпроцессом в процессе компиляции. Для файлов исходного кода C это собственно компилятор и ассемблер (плюс компоновщик, если компоновка выполняется).
Без указания выходного файла вывод выглядит так:
# cc1 0.12 0.01 # as 0.00 0.01
Первое число в каждой строке — «время пользователя», то есть время, затраченное на выполнение самой программы. Второе число — «система времени», время, затраченное на выполнение системных процедур от имени программы. Оба числа указаны в секундах.
При указании выходного файла вывод дописывается в указанный файл, и он выглядит так:
0.12 0.01 cc1 options 0.00 0.01 as options
«Время пользователя» и «Время системы» перемещаются перед именем программы, и отображаются опции, переданные программе, чтобы можно было узнать, какой файл компилировался и с какими опциями.
-fdump-final-insns[=file]
-
Вывести окончательное внутреннее представление (RTL) в file. Если необязательный аргумент опущен (или если file это
.), имя файла дампа определяется путем добавления.gkdк имени файла выходного файла компиляции. -fcompare-debug[=opts]-
Если во время компиляции не произошла ошибка, повторно запустите компилятор, добавив opts и -fcompare-debug-second к аргументам, передаваемым во вторую компиляцию. Выведите окончательное внутреннее представление в обеих компиляциях и выведите ошибку, если они отличаются.
Если знак равенства опущен, используется значение по умолчанию -gtoggle.
Переменная окружения
GCC_COMPARE_DEBUG, если она определена, непуста и отлична от нуля, неявно включает -fcompare-debug. ЕслиGCC_COMPARE_DEBUGопределена как строка, начинающаяся с тире, она используется для opts, в противном случае используется значение по умолчанию -gtoggle.-fcompare-debug=, со знаком равенства, но без opts, эквивалентно -fno-compare-debug, что отключает выгрузку окончательного представления и вторую компиляцию, предотвращая даже
GCC_COMPARE_DEBUGот вступления в силу.Чтобы проверить полное покрытие во время тестирования с -fcompare-debug, установите
GCC_COMPARE_DEBUGв значение -fcompare-debug-not-overridden, которое GCC отклонит как некорректный параметр в любой реальной компиляции (а не в предварительной обработке, сборке или компоновке). Для получения просто предупреждения, установкаGCC_COMPARE_DEBUGв ‘-w%n-fcompare-debug not overridden’ подойдет. -fcompare-debug-second-
Этот параметр неявно передаётся компилятору для второй компиляции, запрошенной -fcompare-debug, вместе с параметрами для подавления предупреждений и опуская другие параметры, которые могли бы привести к тому, что компилятор создаёт выходные файлы или выводит информацию в стандартный вывод как побочный эффект. Имена файлов дампов и сохранённых временных файлов изменяются таким образом, чтобы в них содержалось
.gkдополнительное расширение во время второй компиляции, чтобы избежать перезаписи файлов, созданных первой компиляцией.Когда этот параметр передаётся драйверу компилятора, это приводит к пропуску первой компиляции, что делает его полезным в основном для отладки самого компилятора.
-gtoggle-
Отключить генерацию отладочной информации, если без этого параметра она генерируется, или включить её на уровне 2 в противном случае. Позиция этого аргумента в командной строке не имеет значения; он вступает в силу после обработки всех других параметров и делает это только один раз, независимо от того, сколько раз он указан. Это в основном предназначено для использования с -fcompare-debug.
-fvar-tracking-assignments-toggle-
Переключить -fvar-tracking-assignments так же, как -gtoggle переключает -g.
-Q-
Заставляет компилятор выводить имя каждой функции по мере её компиляции и выводить некоторую статистику о каждом проходе по завершении.
-ftime-report-
Заставляет компилятор выводить некоторую статистику о времени, затраченном каждым проходом, по завершении.
-ftime-report-details-
Записывать время, затраченное частями инфраструктуры, отдельно для каждого прохода.
-fira-verbose=n-
Управлять подробностью файла дампов для интегрированного регистратора. Значение по умолчанию равно 5. Если значение n больше или равно 10, вывод дампов отправляется в stderr в том же формате, что и n минус 10.
-flto-report-
Выводит отчёт с внутренними подробностями о работе оптимизатора на этапе компоновки. Содержание этого отчёта варьируется от версии к версии. Он предназначен для использования разработчиками GCC при обработке объектных файлов в режиме LTO (через -flto).
Отключено по умолчанию.
-flto-report-wpa-
Как -flto-report, но выводит только информацию для фазы WPA оптимизации на этапе компоновки.
-fmem-report-
Заставляет компилятор выводить некоторую статистику о выделении постоянной памяти по завершении.
-fmem-report-wpa-
Заставляет компилятор выводить некоторую статистику о выделении постоянной памяти только для фазы WPA.
-fpre-ipa-mem-report-fpost-ipa-mem-report-
Заставляет компилятор выводить некоторую статистику о выделении постоянной памяти до или после межпроцедурной оптимизации.
-fprofile-report-
Заставляет компилятор выводить некоторую статистику о согласованности (оценённого) профиля и эффекте отдельных проходов.
-fstack-usage-
Заставляет компилятор выводить информацию об использовании стека для программы на основе функции. Имя файла для дампов создаётся путем добавления .su к auxname. auxname генерируется из имени выходного файла, если он указан явно и это не исполняемый файл, в противном случае это имя файла без пути исходного файла. Запись состоит из трёх полей:
- Имя функции.
- Количество байтов.
- Один или несколько квалификаторов:
static,dynamic,bounded.
Квалификатор
staticозначает, что функция обрабатывает стек статически: фиксированное количество байтов выделяется для фрейма при входе в функцию и освобождается при выходе из функции; в противном случае корректировки стека внутри функции не производятся. Второе поле — это это фиксированное количество байтов.Квалификатор
dynamicозначает, что функция обрабатывает стек динамически: помимо описанного выше статического выделения, внутри функции выполняются корректировки стека, например, для помещения/изъятия аргументов вокруг вызовов функций. Если также присутствует квалификаторbounded, количество таких корректировок ограничено во время компиляции, и второе поле представляет собой верхнюю границу общего объёма стека, используемого функцией. Если он отсутствует, количество таких корректировок не ограничено во время компиляции, и второе поле представляет только ограниченную часть. -fstats-
Выводить статистику о обработке на этапе front-end по окончании компиляции. Этот параметр поддерживается только front-end C++, и информация обычно полезна только для команды разработчиков G++.
-fdbg-cnt-list-
Вывести имя и максимальное значение счётчика для всех отладочных счётчиков.
-fdbg-cnt=counter-value-list-
Установить максимальное значение внутреннего отладочного счётчика. counter-value-list — это список пар name:value через запятую, которые устанавливают максимальное значение каждого отладочного счётчика name на value. Все отладочные счётчики имеют начальное максимальное значение
UINT_MAX; таким образом,dbg_cntвсегда возвращает true, если максимальное значение не установлено этим параметром. Например, с -fdbg-cnt=dce:10,tail_call:0,dbg_cnt(dce)возвращает true только для первых 10 вызовов. -print-file-name=library-
Вывести полное абсолютное имя файла библиотеки library, которое будет использоваться при компоновке, и ничего больше не делать. С этим параметром GCC не компилирует и не компонует ничего; он просто выводит имя файла.
-print-multi-directory-
Вывести имя каталога, соответствующее выбранному multilib любыми другими переключателями, присутствующими в командной строке. Этот каталог должен существовать в
GCC_EXEC_PREFIX. -print-multi-lib-
Вывести отображение имен каталогов multilib на переключатели компилятора, которые их активируют. Имя каталога разделяется от переключателей символом ‘;’, а каждый переключатель начинается с ‘@’ вместо ‘-’, без пробелов между несколькими переключателями. Это предназначено для упрощения обработки shell-скриптов.
-print-multi-os-directory-
Вывести путь к библиотекам ОС для выбранного multilib, относительно некоторого подкаталога lib. Если библиотеки ОС присутствуют в подкаталоге lib и не используются multilib, это обычно просто ., если библиотеки ОС присутствуют в подкаталогах libsuffix родственных директорий, это выводит, например, ../lib64, ../lib или ../lib32, или если библиотеки ОС присутствуют в подкаталогах lib/subdir, это выводит, например, amd64, sparcv9 или ev6.
-print-multiarch-
Вывести путь к библиотекам ОС для выбранного multiarch, относительно некоторого подкаталога lib.
-print-prog-name=program-
Как -print-file-name, но ищет программу, такую как
cpp. -print-libgcc-file-name-
То же, что и -print-file-name=libgcc.a.
Это полезно, когда вы используете -nostdlib или -nodefaultlibs, но хотите скомпоновать с libgcc.a. Вы можете сделать так:
gcc -nostdlib files… `gcc -print-libgcc-file-name`
-print-search-dirs-
Вывести имя настроенного каталога установки и список каталогов программ и библиотек, которые
gccищет — и ничего больше не делать.Это полезно, когда
gccвыводит сообщение об ошибке ‘проблема с установкой, нельзя выполнить cpp0: нет такого файла или каталога’. Чтобы решить это, вам нужно поместить cpp0 и другие компоненты компилятора туда, гдеgccожидает их найти, или вы можете установить переменную окруженияGCC_EXEC_PREFIXв каталог, где вы их установили. Не забудьте заключительный символ ‘/’. См. Переменные окружения. -print-sysroot-
Вывести целевой каталог sysroot, используемый во время компиляции. Это целевой sysroot, указанный либо во время конфигурации, либо с помощью параметра --sysroot, возможно, с дополнительным суффиксом, зависящим от параметров компиляции. Если целевой sysroot не указан, параметр ничего не выводит.
-print-sysroot-headers-suffix-
Вывести суффикс, добавленный к целевому sysroot при поиске заголовочных файлов, или вывести ошибку, если компилятор не настроен с таким суффиксом — и ничего больше не делать.
-dumpmachine-
Вывести целевую машину компилятора (например, ‘i686-pc-linux-gnu’)—и ничего больше не делать.
-dumpversion-
Вывести версию компилятора (например,
3.0,6.3.0или7)—и ничего более. Это версия компилятора, используемая в путях к файлам, спецификациях, может быть представлена одним числом (главная версия), двумя числами через точку (главная и второстепенная версии) или тремя числами через точки (главная, второстепенная и номер исправления). -dumpfullversion-
Вывести полную версию компилятора, всегда 3 числа через точки, главную, второстепенную и номер исправления.
-dumpspecs-
Вывести встроенные спецификации компилятора—и ничего более. (Это используется при построении самого GCC.) См. Файлы спецификаций.
Далее: Параметры подмодели, Предыдущее: Параметры генерации кода, Вверх: Вызов GCC [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/Developer-Options.html