- •Содержание Назначение и условия применения программы
- •Характеристики программы
- •Обращение к программе Синтаксис командной строки и правила задания опций
- •Управление стадиями обработки и выводом компилятора
- •Опции управления диалектом языка Си
- •Опции вывода и подавления предупреждений
- •Опции отладки
- •Опции оптимизации
- •Опции препроцессора
- •Передача опций ассемблеру
- •Опции каталогов поиска
- •Опции задания целевой машины и версии компилятора
- •Машинно-зависимые опции для целевой платформы
- •Опции генерации кода
- •Переменные окружения, управляющие работой компилятора
- •Перечень опций, не описанных в данной инструкции
- •Сообщения
- •Приложение а. Бинарные утилиты
- •Утилита objcopy Общие сведения
- •Формат командной строки
- •Описание опций
- •Утилита objdump Общие сведения
- •Формат командной строки
- •Описание опций
- •Редактор связейld Общие сведения
- •Описание опций
- •Переменные окружения
- •Ассемблер as Общие сведения
- •Формат командной строки
- •Входные файлы и исходная программа
- •Выходные (объектные) файлы
- •Предупреждения и сообщения об ошибках
- •Общие опции командной строки
- •Специфические опции целевой платформы
- •Лист регистрации изменений
Опции отладки
-g (--debug)
Генерировать информацию для отладчика в формате, принятом в данной операционной системе (stabs, COFF, XCOFF, DWARF). Отладчикgdb может использовать информацию в любом из этих форматов. Компилятор СКРВ Багет порождает отладочную информацию в форматеDWARF.
Компилятор позволяет использовать опцию -gодновременно с опциями оптимизации-O. Однако при отладке оптимизированного кода могут возникнуть определенные проблемы. Например, некоторые декларированные переменные могут отсутствовать; управление может "перескочить" в какое-нибудь неожиданное для вас место в программе; некоторые операторы могут вообще исчезнуть при оптимизированной компиляции либо из-за того, их результатом является константа, либо из-за того, что соответствующее значение получено в результате других вычислений; некоторые операторы могли попасть в другое место программы, потому что были вынесены из цикла.
Тем не менее, отладка оптимизированных программ вполне допустима и возможна.
-gуровень (--debug уровень)
Вывести отладочную информацию заданного уровня.Уровень определяет объем выводимой информации и, следовательно, возможности последующей отладки. По умолчаниюуровень=2.
Уровень=1 порождает минимальную информацию, достаточную для того, чтобы отслеживать вложенность вызовов функций. Выводятся описания функций и внешних переменных, но информация о локальных переменных и номерах строк отсутствует.
Уровень=3обеспечивает вывод дополнительной информации, например, макроопределений, имеющихся в программе.
-dбуквы
Выдавать отладочные дампы во время компиляции. Моменты выдачи дампов определяются при помощи букв. В большинстве случаев дамп помещается в файл с именемфайл, к которому добавлено некоторое расширение (файл— имя компилируемого файла). Например, при компиляции файлаtest.c с опцией-dr дамп будет помещен в файл с именемtest.c.rtl. Ниже перечислены возможные в данной опциибуквыи типы соответствующих дампов.
M Выдать после препроцессирования все макроопределения, а результат препроцессирования не выдавать.
N Выдать в конце препроцессирования имена всех макросов.
D Выдать в конце препроцессирования все макроопределения в дополнение к обычному выводу.
Y Выдавать на стандартный протокол отладочную информацию во время синтаксического разбора.
r Выдать сгенерированный RTL-код непосредственно после его генерации вфайл.rtl.
x Не компилировать функции, а только генерировать для них RTL-код. Используется обычно в сочетании сr.
j Выдать RTL-дамп после оптимизации переходов вфайл.jump.
s Выдать RTL-дамп после исключения общих подвыражений (и повторной оптимизации переходов, которая иногда выполняется после этого) вфайл.cse.
L Выдать RTL-дамп после оптимизации циклов вфайл.loop.
t Выдать RTL-дамп после повторного исключения общих подвыражений (и повторной оптимизации переходов, которая иногда выполняется после этого) вфайл.cse2.
f Выдать RTL-дамп после анализа потоков данных вфайл.flow.
c Выдать RTL-дамп после комбинирования инструкций вфайл.combine.
S Выдать RTL-дамп после первого прохода планирования инструкций вфайл.sched.
l Выдать RTL-дамп после локального распределения регистров вфайл.lreg.
g Выдать RTL-дамп после глобального распределения регистров вфайл.greg.
R Выдать RTL-дамп после второго прохода планирования инструкций вфайл.sched2.
J Выдать RTL-дамп после последней оптимизации переходов вфайл.jump2.
d Выдать RTL-дамп после планирования переходов со слотами задержки вфайл.dbr.
k Выдать RTL-дамп после перехода к стековым регистрам вфайл.stack.
a Выдать все перечисленные выше RTL-дампы.
M Выдать на стандартный протокол статистику использования памяти.
P Аннотировать ассемблерный вывод комментариями, указывающими, какие шаблоны инструкций и какие их альтернативы были использованы.
-save-temps(--save-temps)
Сохранять временные промежуточные файлы. Оставлять их в текущем каталоге с базовым именем исходного файла и соответствующим расширением. Например, при компиляции файла foo.cс опциями-c -save-temps в текущем каталоге останутся файлыfoo.i, foo.s, foo.o.
-print-prog-name=программа(--print-prog-name=программа)
Напечатать полное имя программы(напримерcpp), которая бы использовалась для обработки файлов при данном запускеgcc, и больше ничего не делать.
-print-search-dirs (--print-search-dirs)
Напечатать имя установочного каталога и список каталогов, в которых gccбудет искать выполняемые программы и библиотеки, и больше ничего не делать.
Это полезно в таких случаях, когда gccвыдает диагностику типа "installation problem, cannot exec cpp: No such file or directory". ("Проблема установки, не могу выполнить cpp: нет такого файла или каталога".) В такой ситуации следует либо поместитьcppи другие компоненты компилятора в те каталоги, гдеgccрассчитывает их найти, либо определить переменную окруженияGCC_EXEC_PREFIX, задав в качестве ее значения имя каталога, где фактически находятся компоненты компилятора (см. ниже гл. 13).