Spec-Zone.ru › GCC 15

3.8 Параметры управления форматированием диагностических сообщений

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

-fmessage-length=n

Пытаться форматировать сообщения об ошибках так, чтобы они помещались в строки длиной примерно n символов. Если n равно нулю, перенос строк не выполняется; каждое сообщение об ошибке выводится в одной строке. Это значение по умолчанию для всех языковых интерфейсов.

Примечание: этот параметр также влияет на отображение директив препроцессора ‘#error’ и ‘#warning’, а также атрибута ‘deprecated’ функции/типа/переменной. Однако он не влияет на директивы ‘pragma GCC warning’ и ‘pragma GCC error’.

-fdiagnostics-plain-output

Этот параметр предписывает по возможности выводить диагностику в простом формате. Это может быть полезно при запуске dejagnu или других утилит, которым требуется анализировать вывод диагностики и которые предпочитают, чтобы он оставался более стабильным с течением времени. В настоящее время -fdiagnostics-plain-output эквивалентен следующим параметрам:

-fno-diagnostics-show-caret
-fno-diagnostics-show-line-numbers
-fdiagnostics-color=never
-fdiagnostics-urls=never
-fdiagnostics-path-format=separate-events
-fdiagnostics-text-art-charset=none
-fno-diagnostics-show-event-links

В будущем, если GCC изменит внешний вид диагностики по умолчанию, в этот список будет добавлен соответствующий параметр для отключения нового поведения.

-fdiagnostics-show-location=once

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

-fdiagnostics-show-location=every-line

Имеет смысл только в режиме переноса строк. Указывает средству вывода диагностических сообщений выводить одинаковые сведения о расположении в исходном коде (в качестве префикса) для физических строк, полученных при разбиении сообщения, которое слишком длинное для одной строки.

-fdiagnostics-color[=WHEN]
-fno-diagnostics-color

Использовать цвет в диагностических сообщениях. WHEN может принимать значение ‘never’, ‘always’ или ‘auto’. Значение по умолчанию зависит от конфигурации компилятора: это может быть любое из указанных выше значений WHEN, либо ‘never’, если в окружении отсутствует переменная среды GCC_COLORS, и ‘auto’ в противном случае. Значение ‘auto’ заставляет GCC использовать цвет, только если стандартный поток ошибок подключен к терминалу и выполнение происходит не в оболочке emacs. Формы -fdiagnostics-color и -fno-diagnostics-color являются псевдонимами -fdiagnostics-color=always и -fdiagnostics-color=never соответственно.

Цвета задаются переменной среды GCC_COLORS. Ее значение представляет собой список возможностей и подстрок Select Graphic Rendition (SGR), разделенных двоеточиями. Команды SGR интерпретируются терминалом или эмулятором терминала. (Допустимые значения и их смысл как атрибутов символов см. в документации к используемому текстовому терминалу.) Значения этих подстрок — целые числа в десятичной записи, которые можно объединять с помощью точек с запятой. К распространенным значениям относятся ‘1’ для полужирного начертания, ‘4’ для подчеркивания, ‘5’ для мигания, ‘7’ для инверсии, ‘39’ для цвета текста по умолчанию, ‘30’ — ‘37’ для цветов текста, ‘90’ — ‘97’ для цветов текста в 16-цветном режиме, ‘38;5;0’ — ‘38;5;255’ для цветов текста в 88- и 256-цветном режимах, ‘49’ для цвета фона по умолчанию, ‘40’ — ‘47’ для цветов фона, ‘100’ — ‘107’ для цветов фона в 16-цветном режиме и ‘48;5;0’ — ‘48;5;255’ для цветов фона в 88- и 256-цветном режимах.

Значение GCC_COLORS по умолчанию:

error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
type-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32\
highlight-a=01;32:highlight-b=01;34

где ‘01;31’ означает полужирный красный, ‘01;35’ — полужирный пурпурный, ‘01;36’ — полужирный голубой, ‘32’ — зеленый, ‘34’ — синий, ‘01’ — полужирный, а ‘31’ — красный. Если задать для GCC_COLORS пустую строку, цвет отключается. Поддерживаются следующие возможности.

error=

Подстрока SGR для маркеров ошибок.

warning=

Подстрока SGR для маркеров предупреждений.

note=

Подстрока SGR для маркеров примечаний.

path=

Подстрока SGR для раскрашивания путей событий потока управления, выводимых с помощью -fdiagnostics-path-format=, например идентификаторов отдельных событий и строк, обозначающих межпроцедурные вызовы и возвраты.

range1=

Подстрока SGR для первого дополнительного диапазона.

range2=

Подстрока SGR для второго дополнительного диапазона.

locus=

Подстрока SGR для сведений о расположении, например ‘file:line’ или ‘file:line:column’.

quote=

Подстрока SGR для сведений, выводимых в кавычках.

fnname=

Подстрока SGR для имен функций C++.

targs=

Подстрока SGR для привязок параметров шаблонов функций C++.

fixit-insert=

Подстрока SGR для подсказок fix-it, предлагающих вставить или заменить текст.

fixit-delete=

Подстрока SGR для подсказок fix-it, предлагающих удалить текст.

diff-filename=

Подстрока SGR для заголовков имен файлов в создаваемых патчах.

diff-hunk=

Подстрока SGR для начала фрагментов в создаваемых патчах.

diff-delete=

Подстрока SGR для удаленных строк в создаваемых патчах.

diff-insert=

Подстрока SGR для вставленных строк в создаваемых патчах.

type-diff=

Подстрока SGR для выделения несовпадающих типов в аргументах шаблонов интерфейса C++.

valid=

Подстрока SGR для выделения допустимых элементов в текстовых диаграммах.

invalid=

Подстрока SGR для выделения недопустимых элементов в текстовых диаграммах.

highlight-a=
highlight-b=

Подстроки SGR для контрастного выделения двух разных элементов в диагностических сообщениях, например пары несовпадающих типов. См. -fdiagnostics-show-highlight-colors.

-fdiagnostics-urls[=WHEN]

Использовать управляющие последовательности для встраивания URL-адресов в диагностические сообщения. Например, если -fdiagnostics-show-option выводит текст с параметром командной строки, управляющим диагностическим сообщением, в этот текст встраивается URL документации к параметру.

WHEN может принимать значение ‘never’, ‘always’ или ‘auto’. Значение ‘auto’ заставляет GCC использовать управляющие последовательности URL, только если стандартный поток ошибок подключен к терминалу и выполнение происходит не в оболочке emacs или графическом терминале, заведомо несовместимом с этой возможностью (см. ниже).

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

GCC также можно настроить (с помощью параметра конфигурации --with-diagnostics-urls=auto-if-env) так, чтобы значение по умолчанию зависело от переменных среды. При такой конфигурации GCC по умолчанию использует значение ‘auto’, если в окружении компилятора присутствует и имеет непустое значение хотя бы одна из переменных среды GCC_URLS или TERM_URLS, и значение ‘never’, если отсутствуют обе.

Однако даже при использовании -fdiagnostics-urls=always поведение зависит от этих переменных среды: если GCC_URLS задана пустой строкой или значением ‘no’, URL-адреса в диагностические сообщения не встраиваются. Если задано значение ‘st’, для URL используются управляющие последовательности ST. Если задано значение ‘bel’, используемое по умолчанию, для URL применяются управляющие последовательности BEL. Любое другое непустое значение включает эту возможность. Если GCC_URLS не задана, используется TERM_URLS в качестве резервного значения. Примечание: ST — это управляющая последовательность ANSI, терминатор строки ‘ESC \’; BEL — это символ ASCII CTRL-G, обычно вызывающий звуковой сигнал.

В настоящее время GCC также пытается обнаружить несколько терминалов, которые, как известно, не поддерживают эту возможность URL и имеют ошибки (или по крайней мере имели их в некоторых все еще используемых версиях), из-за которых управляющие последовательности URL могут работать некорректно, например отображать на экране мусор. В этот список сейчас входят xfce4-terminal, некоторые заведомо ошибочные версии gnome-terminal, консоль Linux и mingw. Эту проверку можно пропустить с помощью -fdiagnostics-urls=always.

-fno-diagnostics-show-option

По умолчанию каждое выведенное диагностическое сообщение содержит текст с указанием параметра командной строки, который непосредственно управляет этим сообщением (если механизм диагностики может определить такой параметр). Флаг -fno-diagnostics-show-option отключает такое поведение.

-fno-diagnostics-show-caret

По умолчанию каждое выведенное диагностическое сообщение содержит исходную строку кода и указатель ‘^’, обозначающий столбец. Этот параметр подавляет вывод этих сведений. Если задан параметр -fmessage-length=n, исходная строка усекается до n символов. При выводе в терминал ширина ограничивается значением переменной среды COLUMNS или, если она не задана, шириной терминала.

-fno-diagnostics-show-labels

По умолчанию при выводе исходного кода (с помощью -fdiagnostics-show-caret) диагностические сообщения могут помечать диапазоны исходного кода относящимися к ним сведениями, например типами выражений:

printf ("foo %s bar", long_i + long_j);
             ~^       ~~~~~~~~~~~~~~~
              |              |
              char *         long int

Этот параметр подавляет вывод таких меток (в приведенном выше примере — вертикальных черт и текста “char *” и “long int”).

-fno-diagnostics-show-event-links

По умолчанию при выводе путей выполнения (с помощью -fdiagnostics-path-format=inline-events) GCC выводит линии, соединяющие связанные события, например линию между событиями 1 и 2 в следующем примере:

3 |   if (p)
  |       ^
  |       |
  |       (1) following `false' branch (when `p' is NULL)... ->-+
  |                                                             |
  |                                                             |
  |+------------------------------------------------------------+
4 ||    return 0;
5 ||  return *p;
  ||         ~
  ||         |
  |+-------->(2) ...to here
  |          (3) dereference of NULL `p'

Этот параметр подавляет вывод таких соединительных линий.

-fno-diagnostics-show-cwe

С диагностическими сообщениями может быть связан идентификатор CWE. Сам GCC предоставляет такие метаданные только для некоторых диагностических сообщений -fanalyzer. Диагностические сообщения с такими метаданными могут предоставлять и плагины GCC. По умолчанию, если эта информация имеется, она выводится вместе с диагностическим сообщением. Этот параметр подавляет вывод этих метаданных.

-fno-diagnostics-show-rules

С диагностическими сообщениями могут быть связаны правила, например из стандарта программирования или спецификации. Сам GCC не связывает правила ни с одним из своих диагностических сообщений, но это могут делать плагины. По умолчанию, если эта информация имеется, она выводится вместе с диагностическим сообщением. Этот параметр подавляет вывод этих метаданных.

-fno-diagnostics-show-highlight-colors

GCC может использовать цвет для выделения и контрастирования при выводе диагностических сообщений и цитировании исходного кода пользователя.

Например, в следующем фрагменте

demo.c: In function `test_bad_format_string_args':
../../src/demo.c:25:18: warning: format `%i' expects argument of type `int', but argument 2 has type `const char *' [-Wformat=]
   25 |   printf("hello %i", msg);
      |                 ~^   ~~~
      |                  |   |
      |                  int const char *
      |                 %s
  • %i и int в сообщении, а также int в цитируемом исходном коде окрашиваются с помощью highlight-a (по умолчанию — полужирный зеленый), а
  • const char * в сообщении и в цитируемом исходном коде окрашиваются с помощью highlight-b (по умолчанию — полужирный синий).

Цель состоит в том, чтобы привлечь внимание читателя к взаимосвязям между различными аспектами диагностического сообщения и исходным кодом, группируя связанные элементы цветом и отличая несовпадающие элементы друг от друга.

Дополнительная раскраска включена по умолчанию, если включен цветной вывод (согласно -fdiagnostics-color=), однако ее можно отключить отдельно с помощью -fno-diagnostics-show-highlight-colors.

-fno-diagnostics-show-line-numbers

По умолчанию при выводе исходного кода (с помощью -fdiagnostics-show-caret) слева выводится поле с номерами строк. Этот параметр подавляет вывод этого поля.

-fdiagnostics-minimum-margin-width=width

Этот параметр задает минимальную ширину левого поля, выводимого параметром -fdiagnostics-show-line-numbers. Значение по умолчанию — 6.

-fdiagnostics-parseable-fixits

Выводить подсказки fix-it в формате, доступном для машинного разбора и пригодном для использования в IDE. Для каждой подсказки fix-it после соответствующего диагностического сообщения будет выведена строка, начинающаяся со строки “fix-it:”. Например:

fix-it:"test.c":{45:3-45:21}:"gtk_widget_show_all"

Расположение задается полуоткрытым диапазоном, представленным количеством байтов; отсчет начинается с байта 1 в первом столбце. В приведенном выше примере байты с 3-го по 20-й строки 45 файла “test.c” заменяются указанной строкой:

00000000011111111112222222222
12345678901234567890123456789
  gtk_widget_showall (dlg);
  ^^^^^^^^^^^^^^^^^^
  gtk_widget_show_all

В имени файла и строке замены обратная косая черта экранируется как “\\”, табуляция — как “\t”, новая строка — как “\n”, двойные кавычки — как “\"”, а непечатаемые символы записываются в восьмеричном формате (например, вертикальная табуляция — как “\013”).

Пустая строка замены означает, что указанный диапазон следует удалить. Пустой диапазон (например, “45:3-45:3”) означает, что строку следует вставить в указанную позицию.

-fdiagnostics-generate-patch

Выводить подсказки fix-it в stderr в формате унифицированного diff после вывода диагностических сообщений. Например:

--- test.c
+++ test.c
@ -42,5 +42,5 @

 void show_cb(GtkDialog *dlg)
 {
-  gtk_widget_showall(dlg);
+  gtk_widget_show_all(dlg);
 }

Diff может быть раскрашен или не раскрашен в соответствии с теми же правилами, что и диагностические сообщения (см. -fdiagnostics-color).

-fdiagnostics-show-template-tree

В интерфейсе C++ при выводе диагностических сообщений о несовпадающих типах шаблонов, например:

could not convert 'std::map<int, std::vector<double> >()'
  from 'map<[...],vector<double>>' to 'map<[...],vector<float>>

флаг -fdiagnostics-show-template-tree включает вывод древовидной структуры, показывающей общие и различающиеся части типов, например:

map<
  [...],
  vector<
    [double != float]>>

Различающиеся части выделяются цветом (в данном случае “double” и “float”).

-fno-elide-type

По умолчанию при выводе диагностических сообщений о несовпадающих типах шаблонов интерфейс C++ отображает общие части типов как “[...]”, чтобы упростить сообщение об ошибке. Например:

could not convert 'std::map<int, std::vector<double> >()'
  from 'map<[...],vector<double>>' to 'map<[...],vector<float>>

Флаг -fno-elide-type отключает это поведение. Этот флаг также влияет на вывод параметра -fdiagnostics-show-template-tree.

-fdiagnostics-path-format=KIND

Задать способ вывода путей событий потока управления для диагностических сообщений, с которыми связан такой путь.

KIND может принимать значение ‘none’, ‘separate-events’ или ‘inline-events’ (по умолчанию).

Значение ‘none’ означает, что пути диагностики не выводятся.

Значение ‘separate-events’ означает, что для каждого события в диагностическом сообщении выводится отдельное диагностическое сообщение типа “note”. Например:

test.c:29:5: error: passing NULL as argument 1 to 'PyList_Append' which requires a non-NULL parameter
test.c:25:10: note: (1) when 'PyList_New' fails, returning NULL
test.c:27:3: note: (2) when 'i < count'
test.c:29:5: note: (3) when calling 'PyList_Append', passing NULL from (1) as argument 1

Значение ‘inline-events’ означает, что события выводятся «в строке» исходного кода. При таком представлении события объединяются в последовательности достаточно близко расположенных событий и выводятся в виде помеченных диапазонов в исходном коде.

Например, те же события, что и выше, могут быть выведены так:

'test': events 1-3
 25 |   list = PyList_New(0);
    |          ^~~~~~~~~~~~~
    |          |
    |          (1) when 'PyList_New' fails, returning NULL
 26 |
 27 |   for (i = 0; i < count; i++) {
    |   ~~~
    |   |
    |   (2) when 'i < count'
 28 |     item = PyLong_FromLong(random());
 29 |     PyList_Append(list, item);
    |     ~~~~~~~~~~~~~~~~~~~~~~~~~
    |     |
    |     (3) when calling 'PyList_Append', passing NULL from (1) as argument 1

Межпроцедурный поток управления показывается путем группировки событий по кадрам стека и использования отступов для отображения вложенности, добавления и удаления кадров стека.

Например:

'test': events 1-2
    |
    |  133 | {
    |      | ^
    |      | |
    |      | (1) entering 'test'
    |  134 |   boxed_int *obj = make_boxed_int (i);
    |      |                    ~~~~~~~~~~~~~~~~~~
    |      |                    |
    |      |                    (2) calling 'make_boxed_int'
    |
    +--> 'make_boxed_int': events 3-4
           |
           |  120 | {
           |      | ^
           |      | |
           |      | (3) entering 'make_boxed_int'
           |  121 |   boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int));
           |      |                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |                                    |
           |      |                                    (4) calling 'wrapped_malloc'
           |
           +--> 'wrapped_malloc': events 5-6
                  |
                  |    7 | {
                  |      | ^
                  |      | |
                  |      | (5) entering 'wrapped_malloc'
                  |    8 |   return malloc (size);
                  |      |          ~~~~~~~~~~~~~
                  |      |          |
                  |      |          (6) calling 'malloc'
                  |
    <-------------+
    |
 'test': event 7
    |
    |  138 |   free_boxed_int (obj);
    |      |   ^~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (7) calling 'free_boxed_int'
    |
(etc)
-fdiagnostics-show-path-depths

Этот параметр предоставляет дополнительные сведения при выводе путей потока управления, связанных с диагностическим сообщением.

Если указан этот параметр, для каждой последовательности событий в -fdiagnostics-path-format=inline-events будет выводиться глубина стека. Если параметр указан вместе с -fdiagnostics-path-format=separate-events, при выводе каждого события будут добавляться глубина стека и объявление функции.

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

-fno-show-column

Не выводить номера столбцов в диагностических сообщениях. Это может потребоваться, если диагностические сообщения анализируются программой, которая не понимает номера столбцов, например dejagnu.

-fdiagnostics-column-unit=UNIT

Выбрать единицы измерения для номера столбца. Это влияет как на традиционные диагностические сообщения (если не задан параметр -fno-show-column), так и на диагностические сообщения в формате JSON, если он запрошен.

Значение UNIT по умолчанию, ‘display’, учитывает количество экранных столбцов, занимаемых каждым символом. В случае символов табуляции это количество может быть больше числа байтов, необходимых для кодирования символа, а в случае многобайтовых символов — меньше. Например, символ “ГРЕЧЕСКАЯ СТРОЧНАЯ БУКВА ПИ (U+03C0)” занимает один экранный столбец, а для его кодирования в UTF-8 требуются два байта; символ “СЛЕГКА УЛЫБАЮЩЕЕСЯ ЛИЦО (U+1F642)” занимает два экранных столбца, а для его кодирования в UTF-8 требуются четыре байта.

Если задать для UNIT значение ‘byte’, номер столбца во всех случаях будет соответствовать фактическому количеству байтов, как это традиционно делал GCC до версии 11.1.0.

-fdiagnostics-column-origin=ORIGIN

Выбрать начало отсчета номеров столбцов, то есть номер, назначаемый первому столбцу. Значение по умолчанию — 1, что соответствует традиционному поведению GCC и руководству по стилю GNU. Некоторые утилиты могут работать лучше, если начало отсчета равно 0; можно указать любое неотрицательное значение.

-fdiagnostics-escape-format=FORMAT

При выводе относящихся к диагностическому сообщению строк исходного кода GCC обычно пытается напрямую вывести байты исходного кода. Однако некоторые диагностические сообщения связаны с проблемами кодировки в исходном файле, например с некорректным UTF-8 или проблемами нормализации Unicode. Для таких сообщений задан специальный признак, указывающий GCC экранировать байты, не относящиеся к печатным символам ASCII, при выводе соответствующих строк исходного кода.

Этот параметр управляет способом экранирования таких байтов.

Значение FORMAT по умолчанию, ‘unicode’, отображает символы Unicode, не относящиеся к печатным символам ASCII, в виде ‘<U+XXXX>’, а байты, которые не соответствуют корректно закодированному в UTF-8 символу Unicode, — в шестнадцатеричном формате ‘<XX>’.

Например, если строка исходного кода содержит строку ‘before’, за которой следует символ Unicode U+03C0 (“ГРЕЧЕСКАЯ СТРОЧНАЯ БУКВА ПИ”, кодируемый в UTF-8 байтами 0xCF 0x80), затем байт 0xBF (лишний завершающий байт UTF-8) и строку ‘after’, то для такого диагностического сообщения она будет выведена следующим образом:

before<U+03C0><BF>after

Если задать для FORMAT значение ‘bytes’, все непечатаемые байты ASCII будут отображаться в виде ‘<XX>’, что позволяет увидеть исходную кодировку символов Unicode, не относящихся к ASCII. В приведенном выше примере вывод будет следующим:

before<CF><80><BF>after
-fdiagnostics-text-art-charset=CHARSET

Некоторые диагностические сообщения могут содержать диаграммы «текстовое искусство»: визуализации, созданные из текста и предназначенные для просмотра моноширинным шрифтом.

Этот параметр выбирает символы, используемые для вывода таких диаграмм, если они выводятся. CHARSET может принимать значение ‘none’, ‘ascii’, ‘unicode’ или ‘emoji’.

Значение ‘none’ подавляет вывод таких диаграмм. Значение ‘ascii’ гарантирует, что диаграммы будут состоять только из символов ASCII («ASCII-графика»). Значение ‘unicode’ разрешает осторожное использование символов рисования Unicode (например, символов рамок). Значение ‘emoji’ дополнительно разрешает использовать в выводе эмодзи (например, вывод U+26A0 WARNING SIGN с последующим U+FE0F VARIATION SELECTOR-16 для выбора варианта символа в виде эмодзи).

По умолчанию используется значение ‘emoji’, кроме случая, когда для переменной среды LANG задано значение ‘C’; в этом случае по умолчанию используется ‘ascii’.

-fdiagnostics-format=FORMAT

Выбрать другой формат вывода диагностических сообщений. FORMAT может принимать значение ‘text’, ‘sarif-stderr’, ‘sarif-file’, ‘json’, ‘json-stderr’ или ‘json-file’.

Использование этого параметра заменяет все дополнительные «приемники вывода», добавленные с помощью -fdiagnostics-add-output= или заданные с помощью -fdiagnostics-set-output=.

По умолчанию используется значение ‘text’.

Форматы ‘sarif-stderr’ и ‘sarif-file’ выводят диагностические сообщения в формате SARIF версии 2.1.0: соответственно в stderr или в файл с именем source.sarif.

Значения ‘json’, ‘json-stderr’ и ‘json-file’ устарели и обозначают старый формат вывода на основе JSON. Формат ‘json’ является синонимом ‘json-stderr’. Форматы ‘json-stderr’ и ‘json-file’ отличаются только местом вывода JSON. При использовании ‘json-stderr’ данные JSON выводятся в stderr, а при использовании ‘json-file’ записываются в source.gcc.json.

-fdiagnostics-add-output=DIAGNOSTICS-OUTPUT-SPEC

Добавить дополнительный «приемник вывода» для вывода диагностических сообщений.

DIAGNOSTICS-OUTPUT-SPEC должен задавать схему, за которой при необходимости следует : и одна или несколько пар KEY=VALUE, как показано ниже:

SCHEME
SCHEME:KEY=VALUE
SCHEME:KEY=VALUE,KEY2=VALUE2

и т. д.

Схемы, ключи или значения, имена которых начинаются с “experimental”, могут быть изменены или удалены без предупреждения.

SCHEME может иметь следующие значения:

text

Выводить диагностические сообщения в stderr в классическом текстовом формате GCC.

Поддерживаемые ключи:

color=[yes|no]

Переопределить настройки раскраски, заданные параметром -fdiagnostics-color, для этого текстового вывода.

experimental-nesting=[yes|no]

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

experimental-nesting-show-locations=[yes|no]

Если задано experimental-nesting=yes, расположения по умолчанию выводятся; задайте для этого ключа значение no, чтобы отключить их вывод. Этот ключ предназначен для разработчиков GCC при написании тестовых сценариев DejaGnu.

experimental-nesting-show-levels=[yes|no]

Это параметр отладки для использования с experimental-nesting=yes. Задайте для этого ключа значение yes, чтобы выводить в результат явные уровни вложенности. Этот ключ предназначен для разработчиков GCC.

sarif

Выводить диагностические сообщения в файл в формате SARIF.

Поддерживаемые ключи:

file=FILENAME

Задать имя файла для записи вывода SARIF; перед именем может указываться абсолютный или относительный путь. Если параметр не задан, по умолчанию используется source.sarif.

version=[2.1|2.2-prerelease]

Задать версию SARIF для вывода. Если параметр не задан, по умолчанию используется версия 2.1. 2.2-prerelease использует неофициальный черновик будущей спецификации SARIF 2.2 и в этом выпуске должен применяться только для экспериментов.

Например,

-fdiagnostics-add-output=sarif:version=2.1,file=foo.2.1.sarif
-fdiagnostics-add-output=sarif:version=2.2-prerelease,file=foo.2.2.sarif

добавит пару выходных потоков, каждый из которых записывает данные в отдельный файл, используя соответственно версии 2.1 и 2.2 стандарта SARIF.

В EBNF:

diagnostics-output-specifier = diagnostics-output-name
                                   | diagnostics-output-name, ":", key-value-pairs;

diagnostics-output-name = "text" | "sarif";

key-value-pairs = key-value-pair
                      | key-value-pair "," key-value-pairs;

key-value-pair = key "=" value;

key = ? string without a '=' ? ;
value = ? string without a ',' ? ;
-fdiagnostics-set-output=DIAGNOSTICS-OUTPUT-SPEC

Этот параметр работает аналогично -fdiagnostics-add-output=, но вместо добавления дополнительного «приемника вывода» для диагностических сообщений он заменяет все существующие приемники вывода, например заданные с помощью -fdiagnostics-format=, -fdiagnostics-add-output= или предыдущего вызова -fdiagnostics-set-output=.

-fno-diagnostics-json-formatting

По умолчанию при выводе JSON для диагностических сообщений (с помощью -fdiagnostics-format=sarif-stderr, -fdiagnostics-format=sarif-file, -fdiagnostics-format=json, -fdiagnostics-format=json-stderr, -fdiagnostics-format=json-file) GCC добавляет символы новой строки и отступы, чтобы визуально подчеркнуть иерархическую структуру JSON.

Используйте -fno-diagnostics-json-formatting, чтобы подавить эти пробельные символы. Этот параметр необходимо указывать перед параметром, на который он должен влиять.

Это предназначено для совместимости с инструментами, которые не ожидают, что вывод будет содержать символы новой строки, например с инструментами, рассчитанными на вывод старых версий GCC.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Diagnostic-Message-Formatting-Options.html

Spec-Zone.ru

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