3.7 Параметры форматирования диагностических сообщений
Традиционно, форматирование диагностических сообщений не зависело от особенностей устройства вывода (например, его ширины). Вы можете использовать описанные ниже параметры, чтобы контролировать алгоритм форматирования диагностических сообщений, например, количество символов в строке, частоту отображения информации о местоположении источника. Обратите внимание, что некоторые языковые фронтенды могут не учитывать эти параметры.
-
-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
В будущем, если 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
где ‘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 для подсказок исправления, предлагающих текст для вставки или замены.
-
fixit-delete= -
Подстрока SGR для подсказок исправления, предлагающих текст для удаления.
-
diff-filename= -
Подстрока SGR для заголовков файлов в сгенерированных патчах.
-
diff-hunk= -
Подстрока SGR для начала блоков в сгенерированных патчах.
-
diff-delete= -
Подстрока SGR для удалённых строк в сгенерированных патчах.
-
diff-insert= -
Подстрока SGR для вставленных строк в сгенерированных патчах.
-
type-diff= -
Подстрока SGR для выделения несовпадающих типов в аргументах шаблонов в фронтенде C++.
-
valid= -
Подстрока SGR для выделения допустимых элементов в диаграммах текстового искусства.
-
invalid= Подстрока SGR для выделения недопустимых элементов в диаграммах текстового искусства.
-
-
-fdiagnostics-urls[=WHEN] -
По умолчанию каждое выводимое диагностическое сообщение включает текст, указывающий командную строку, которая непосредственно управляет диагностикой (если такая опция известна механизму диагностики). Указание флага -fno-diagnostics-show-option подавляет это поведение.
-
-fno-diagnostics-show-caret -
По умолчанию каждое выводимое диагностическое сообщение включает исходную строку и символ «^» для указания столбца. Этот параметр подавляет эту информацию. Строка исходного кода усекается до n символов, если указан параметр -fmessage-length=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-cwe
-
Сообщения об ошибках могут необязательно иметь связанный идентификатор CWE. Сам GCC предоставляет такую метаданные только для некоторых диагностических сообщений с параметром -fanalyzer. Плагины GCC также могут предоставлять диагностические сообщения с такой метаданными. По умолчанию, если эта информация присутствует, она будет выведена вместе с сообщением об ошибке. Этот параметр подавляет вывод этой метаданных.
-
-fno-diagnostics-show-rules -
Сообщения об ошибках могут необязательно иметь связанные с ними правила, например, из руководства по стилю кодирования или спецификации. Сам GCC не делает этого для ни одного из своих диагностических сообщений, но плагины могут. По умолчанию, если эта информация присутствует, она будет выведена вместе с сообщением об ошибке. Этот параметр подавляет вывод этой метаданных.
-
-fno-diagnostics-show-line-numbers -
По умолчанию, при выводе исходного кода (через -fdiagnostics-show-caret), выводится левый отступ, показывающий номера строк. Этот параметр подавляет вывод этого левого отступа.
-
-fdiagnostics-minimum-margin-width=width -
Этот параметр управляет минимальной шириной левого отступа, выводимого параметром -fdiagnostics-show-line-numbers. По умолчанию он равен 6.
-
-fdiagnostics-parseable-fixits -
Выводить подсказки для исправления в формате, пригодном для машинного анализа, подходящем для использования IDE. Для каждой подсказки для исправления будет напечатана строка после соответствующего диагностического сообщения, начинающаяся со строки «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 -
Выводить подсказки для исправления в stderr в формате unified diff после вывода всех диагностических сообщений. Например:
--- test.c +++ test.c @ -42,5 +42,5 @ void show_cb(GtkDialog *dlg) { - gtk_widget_showall(dlg); + gtk_widget_show_all(dlg); }Диф может быть или не быть цветным, следуя тем же правилам, что и для диагностических сообщений (см. -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’ означает вывести отдельное диагностическое сообщение «примечание» для каждого события в диагностическом сообщении. Например:
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>’, а байты, не соответствующие символу Unicode, должным образом закодированному в UTF-8, будут отображаться в шестнадцатеричном формате ‘<XX>’.
Например, строка исходного кода, содержащая строку ‘before’, за которой следует символ Unicode U+03C0 («ГРЕЧЕСКАЯ МАЛЕНЬКАЯ БУКВА ПИ», с кодировкой UTF-8 0xCF 0x80), за которой следует байт 0xBF (остаточный байт UTF-8), за которым следует строка ‘after’, будет напечатано для такого диагностического сообщения как:
before<U+03C0><BF>after
Установка FORMAT в ‘bytes’ отобразит все непечатаемые ASCII байты в виде ‘<XX>’, тем самым показывая базовую кодировку не-ASCII символов Unicode. Для приведенного выше примера будет напечатано следующее:
before<CF><80><BF>after
-
-fdiagnostics-text-art-charset=CHARSET -
Некоторые диагностические сообщения могут содержать диаграммы «текстового искусства»: визуализации, созданные из текста, предназначенные для просмотра в моноширинном шрифте.
Этот параметр выбирает символы, которые должны использоваться для печати таких диаграмм, если таковые имеются. CHARSET может принимать значения ‘none’, ‘ascii’, ‘unicode’ или ‘emoji’.
Значение ‘none’ подавляет вывод таких диаграмм. Значение ‘ascii’ обеспечит, что такие диаграммы будут чистым ASCII («ASCII-art»). Значение ‘unicode’ позволит использовать символы рисования Unicode (такие как символы рисования рамки). Значение ‘emoji’ добавляет возможность использования смайликов в выводе (например, выводит U+26A0 ЗНАК ПРЕДУПРЕЖДЕНИЯ, за которым следует U+FE0F СЕЛЕКТОР ИЗМЕНЕНИЯ-16 для выбора варианта эмодзи символа).
По умолчанию используется ‘emoji’, за исключением случаев, когда переменная среды
LANGустановлена в ‘C’, в этом случае значение по умолчанию — ‘ascii’. -
-fdiagnostics-format=FORMAT
-
Выберите другой формат для вывода диагностических сообщений. FORMAT может быть ‘text’, ‘sarif-stderr’, ‘sarif-file’, ‘json’, ‘json-stderr’, или ‘json-file’.
По умолчанию используется ‘text’.
Форматы ‘sarif-stderr’ и ‘sarif-file’ выводят диагностические сообщения в формате SARIF Версии 2.1.0, соответственно в поток ошибок stderr или в файл с именем source.sarif.
Формат ‘json’ является синонимом ‘json-stderr’. Форматы ‘json-stderr’ и ‘json-file’ идентичны, за исключением места вывода JSON — в первом случае JSON выводится в stderr, а во втором — в файл source.gcc.json.
Выводимый JSON представляет собой массив JSON верхнего уровня, содержащий объекты JSON, представляющие диагностические сообщения.
Диагностические сообщения могут иметь дочерние диагностические сообщения. Например, эта ошибка и примечание:
misleading-indentation.c:15:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation] 15 | if (flag) | ^~ misleading-indentation.c:17:5: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if' 17 | y = 2; | ^могут быть напечатаны в формате JSON (после форматирования) следующим образом:
[ { "kind": "warning", "locations": [ { "caret": { "display-column": 3, "byte-column": 3, "column": 3, "file": "misleading-indentation.c", "line": 15 }, "finish": { "display-column": 4, "byte-column": 4, "column": 4, "file": "misleading-indentation.c", "line": 15 } } ], "message": "this \u2018if\u2019 clause does not guard...", "option": "-Wmisleading-indentation", "option_url": "https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wmisleading-indentation", "children": [ { "kind": "note", "locations": [ { "caret": { "display-column": 5, "byte-column": 5, "column": 5, "file": "misleading-indentation.c", "line": 17 } } ], "escape-source": false, "message": "...this statement, but the latter is …" } ] "escape-source": false, "column-origin": 1, } ]где
noteявляется дочерним элементомwarning.Диагностическое сообщение имеет
kind. Если этоwarning, то есть ключoption, описывающий командную опцию, контролирующую предупреждение.Диагностическое сообщение может содержать ноль или более расположений. Каждое расположение имеет необязательную строку
labelи до трёх позиций в ней:caretпозицию и необязательныеstartиfinishпозиции. Позиция описывается именемfile, номеромlineи тремя числами, указывающими позицию столбца:-
display-columnсчитает столбцы отображения, учитывая табуляцию и символы с несколькими байтами. -
byte-columnсчитает исходные байты. -
columnравно одному из двух предыдущих, как указано опцией -fdiagnostics-column-unit.
Все три столбца относятся к началу, указанному опцией -fdiagnostics-column-origin, которая обычно равна 1, но может быть установлена, например, в 0 для совместимости с другими утилитами, которые нумеруют столбцы с 0. Начальное значение столбца записывается в выводе JSON в теге
column-origin. В последующих примерах дополнительные выводы номера столбца опущены для краткости.Например, эта ошибка:
bad-binary-ops.c:64:23: error: invalid operands to binary + (have 'S' {aka 'struct s'} and 'T' {aka 'struct t'}) 64 | return callee_4a () + callee_4b (); | ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~ | | | | | T {aka struct t} | S {aka struct s}имеет три расположения. Основное расположение находится у маркера «+» в столбце 23. Есть два дополнительных расположения, описывающие левую и правую части выражения, у которых есть метки. Это может быть выведено в формате JSON как:
{ "children": [], "kind": "error", "locations": [ { "caret": { "column": 23, "file": "bad-binary-ops.c", "line": 64 } }, { "caret": { "column": 10, "file": "bad-binary-ops.c", "line": 64 }, "finish": { "column": 21, "file": "bad-binary-ops.c", "line": 64 }, "label": "S {aka struct s}" }, { "caret": { "column": 25, "file": "bad-binary-ops.c", "line": 64 }, "finish": { "column": 36, "file": "bad-binary-ops.c", "line": 64 }, "label": "T {aka struct t}" } ], "escape-source": false, "message": "invalid operands to binary + …" }Если диагностическое сообщение содержит подсказки по исправлению, у него есть массив
fixits, состоящий из полуоткрытых интервалов, аналогично выводу опции -fdiagnostics-parseable-fixits. Например, это диагностическое сообщение с подсказкой замены:demo.c:8:15: error: 'struct s' has no member named 'colour'; did you mean 'color'? 8 | return ptr->colour; | ^~~~~~ | colorможет быть выведено в формате JSON как:
{ "children": [], "fixits": [ { "next": { "column": 21, "file": "demo.c", "line": 8 }, "start": { "column": 15, "file": "demo.c", "line": 8 }, "string": "color" } ], "kind": "error", "locations": [ { "caret": { "column": 15, "file": "demo.c", "line": 8 }, "finish": { "column": 20, "file": "demo.c", "line": 8 } } ], "escape-source": false, "message": "\u2018struct s\u2019 has no member named …" }где подсказка по исправлению предлагает заменить текст от
startдо, но не включаяnext, значениемstring. Удаления выражаются пустым значением дляstring, вставки — когдаstartравноnext.Если диагностическое сообщение содержит путь событий потока управления, связанных с ним, у него есть массив
pathобъектов, представляющих события. Каждый объект события имеет строкуdescription, объектlocation, а также строкуfunctionи числоdepthдля представления межпроцедурных путей.functionпредставляет текущую функцию в этом событии, аdepthпредставляет глубину стека относительно некоторого эталона: чем выше, тем больше кадров находится в стеке.Например, внутрипроцедурный пример, показанный для -fdiagnostics-path-format=, может иметь следующий JSON для своего пути:
"path": [ { "depth": 0, "description": "when 'PyList_New' fails, returning NULL", "function": "test", "location": { "column": 10, "file": "test.c", "line": 25 } }, { "depth": 0, "description": "when 'i < count'", "function": "test", "location": { "column": 3, "file": "test.c", "line": 27 } }, { "depth": 0, "description": "when calling 'PyList_Append', passing NULL from (1) as argument 1", "function": "test", "location": { "column": 5, "file": "test.c", "line": 29 } } ]Диагностические сообщения имеют булево свойство
escape-source, указывающее, следует ли экранировать не-ASCII байты при выводе соответствующих строк исходного кода (trueдля диагностических сообщений, связанных с проблемами кодировки исходного текста). -
-
-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-14.2.0/gcc/Diagnostic-Message-Formatting-Options.html