Spec-Zone.ru › GCC 12

3.9 Параметры, управляющие статическим анализом

-fanalyzer

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

Этот анализ намного более ресурсоёмкий, чем другие предупреждения GCC.

Включение этого параметра фактически включает следующие предупреждения:

-Wanalyzer-double-fclose 
-Wanalyzer-double-free 
-Wanalyzer-exposure-through-output-file 
-Wanalyzer-file-leak 
-Wanalyzer-free-of-non-heap 
-Wanalyzer-malloc-leak 
-Wanalyzer-mismatching-deallocation 
-Wanalyzer-null-argument 
-Wanalyzer-null-dereference 
-Wanalyzer-possible-null-argument 
-Wanalyzer-possible-null-dereference 
-Wanalyzer-shift-count-negative 
-Wanalyzer-shift-count-overflow 
-Wanalyzer-stale-setjmp-buffer 
-Wanalyzer-unsafe-call-within-signal-handler 
-Wanalyzer-use-after-free 
-Wanalyzer-use-of-pointer-in-stale-stack-frame 
-Wanalyzer-use-of-uninitialized-value 
-Wanalyzer-write-to-const 
-Wanalyzer-write-to-string-literal

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

-Wanalyzer-too-complex

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

По умолчанию, анализ молчаливо прекращается, если код слишком сложен для полного исследования анализатором, и он достигает внутреннего лимита. Параметр -Wanalyzer-too-complex предупреждает, если это происходит.

-Wno-analyzer-double-fclose

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-double-fclose для его отключения.

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

-Wno-analyzer-double-free

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-double-free для его отключения.

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

-Wno-analyzer-exposure-through-output-file

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-exposure-through-output-file для его отключения.

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

-Wno-analyzer-file-leak

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-file-leak для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых объект потока <stdio.h> FILE * утечка.

-Wno-analyzer-free-of-non-heap

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-free-of-non-heap для его отключения.

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

-Wno-analyzer-malloc-leak

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-malloc-leak для его отключения.

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

-Wno-analyzer-mismatching-deallocation

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-mismatching-deallocation для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых вызывается неправильная функция деаллокации для указателя, основанная на функции, которая использовалась для выделения указателя. Диагностика будет предупреждать о несоответствиях между free, скалярным delete и векторным delete[], и теми, которые помечены как пары выделения/освобождения с использованием атрибута malloc.

-Wno-analyzer-possible-null-argument

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-possible-null-argument для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых потенциально-NULL значение передается в аргумент функции, помеченный __attribute__((nonnull)) как требующий не-NULL значение.

-Wno-analyzer-possible-null-dereference

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-possible-null-dereference для его отключения.

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

-Wno-analyzer-null-argument

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-null-argument для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых значение, известное как NULL, передается в аргумент функции, помеченный __attribute__((nonnull)) как требующее не-NULL значение.

-Wno-analyzer-null-dereference

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-null-dereference для его отключения.

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

-Wno-analyzer-shift-count-negative

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-shift-count-negative для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых попытка сдвига выполняется с отрицательным значением счёта. Оно аналогично диагностике -Wshift-count-negative, реализованной в C/C++ фронтендах, но реализовано на основе анализа межпроцедурных путей, а не просто анализа синтаксического дерева. Однако анализатор не отдаёт приоритет обнаружению таких путей, поэтому ложные негативы более вероятны по сравнению с другими предупреждениями.

-Wno-analyzer-shift-count-overflow

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-shift-count-overflow для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых попытка сдвига выполняется со значением счёта, большим или равным точности типа операнда. Оно аналогично диагностике -Wshift-count-overflow, реализованной в C/C++ фронтендах, но реализовано на основе анализа межпроцедурных путей, а не просто анализа синтаксического дерева. Однако анализатор не отдаёт приоритет обнаружению таких путей, поэтому ложные негативы более вероятны по сравнению с другими предупреждениями.

-Wno-analyzer-stale-setjmp-buffer

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-stale-setjmp-buffer для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых longjmp вызывается для перемотки до jmp_buf в отношении вызова setjmp в функции, которая вернулась.

Когда setjmp вызывается на jmp_buf для записи местоположения перемотки, он записывает кадр стека. Кадр стека становится недействительным, когда функция, содержащая вызов setjmp, возвращается. Попытка перемотки к нему посредством longjmp приведет к ссылке на кадр стека, который больше не существует, и, вероятно, к аварийному завершению (или хуже).

-Wno-analyzer-tainted-allocation-size

Для этого предупреждения требуется как -fanalyzer, так и -fanalyzer-checker=taint для его включения; используйте -Wno-analyzer-tainted-allocation-size для его отключения.

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

См. CWE-789: Выделение памяти с чрезмерно большим значением размера.

-Wno-analyzer-tainted-array-index

Для этого предупреждения требуется как -fanalyzer, так и -fanalyzer-checker=taint для его включения; используйте -Wno-analyzer-tainted-array-index для его отключения.

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

См. CWE-129: Неправильная валидация индекса массива.

-Wno-analyzer-tainted-divisor

Для этого предупреждения требуется как -fanalyzer, так и -fanalyzer-checker=taint для его включения; используйте -Wno-analyzer-tainted-divisor для его отключения.

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

-Wno-analyzer-tainted-offset

Для этого предупреждения требуется как -fanalyzer, так и -fanalyzer-checker=taint для его включения; используйте -Wno-analyzer-tainted-offset для его отключения.

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

См. CWE-823: Использование смещения указателя вне диапазона.

-Wno-analyzer-tainted-size

Для этого предупреждения требуется как -fanalyzer, так и -fanalyzer-checker=taint для его включения; используйте -Wno-analyzer-tainted-size для его отключения.

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

-Wno-analyzer-unsafe-call-within-signal-handler

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-unsafe-call-within-signal-handler для его отключения.

Это диагностическое сообщение предупреждает о путях в коде, в которых функция, известная как небезопасная для обработки сигналов (такая как fprintf), вызывается из обработчика сигналов.

-Wno-analyzer-use-after-free

Для этого предупреждения требуется -fanalyzer, который его включает; используйте -Wno-analyzer-use-after-free для его отключения.

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

-Wno-analyzer-use-of-pointer-in-stale-stack-frame
END_OF_DOCUMENT_MARKER

Это предупреждение требует -fanalyzer, которое его включает; используйте -Wno-analyzer-use-of-pointer-in-stale-stack-frame для его отключения.

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

-Wno-analyzer-write-to-const

Это предупреждение требует -fanalyzer, которое его включает; используйте -Wno-analyzer-write-to-const для его отключения.

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

-Wno-analyzer-write-to-string-literal

Это предупреждение требует -fanalyzer, которое его включает; используйте -Wno-analyzer-write-to-string-literal для его отключения.

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

-Wno-analyzer-use-of-uninitialized-value

Это предупреждение требует -fanalyzer, которое его включает; используйте -Wno-analyzer-use-of-uninitialized-value для его отключения.

Данная диагностика предупреждает о путях в коде, где используется неинициализированное значение.

Соответствующие параметры для управления исследованием: --param analyzer-bb-explosion-factor=value, --param analyzer-max-enodes-per-program-point=value, --param analyzer-max-recursion-depth=value и --param analyzer-min-snodes-for-call-summary=value.

Следующие параметры управляют анализатором.

-fanalyzer-call-summaries

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

Если включено, то резюме вызовов используются только для функций с более чем одним местом вызова и достаточно сложными (согласно --param analyzer-min-snodes-for-call-summary=value).

-fanalyzer-checker=name

Ограничить анализатор запуском только указанного проверяющего средства и включить его.

Некоторые проверяющие средства по умолчанию отключены (даже с -fanalyzer), например, проверяющее средство taint, реализующее -Wanalyzer-tainted-array-index, и этот параметр необходим для их включения.

Примечание: в настоящее время -fanalyzer-checker=taint отключает следующие предупреждения от -fanalyzer:

-Wanalyzer-double-fclose 
-Wanalyzer-double-free 
-Wanalyzer-exposure-through-output-file 
-Wanalyzer-file-leak 
-Wanalyzer-free-of-non-heap 
-Wanalyzer-malloc-leak 
-Wanalyzer-mismatching-deallocation 
-Wanalyzer-null-argument 
-Wanalyzer-null-dereference 
-Wanalyzer-possible-null-argument 
-Wanalyzer-possible-null-dereference 
-Wanalyzer-unsafe-call-within-signal-handler 
-Wanalyzer-use-after-free
-fno-analyzer-feasibility

Этот параметр предназначен для разработчиков анализатора.

По умолчанию анализатор проверяет, что для каждого выдаваемого им диагностического сообщения существует выполнимый путь управления: что условия, которые выполняются, не являются взаимоисключающими. Диагностические сообщения, для которых не может быть найден выполнимый путь, отклоняются. Этот фильтр может быть отключен с помощью -fno-analyzer-feasibility для отладки проблем в этом коде.

-fanalyzer-fine-grained

Этот параметр предназначен для разработчиков анализатора.

Внутренне анализатор строит «взрывной граф», который объединяет графы потока управления с информацией о потоке данных.

По умолчанию ребро в этом графе может содержать эффекты выполнения нескольких операторов внутри базового блока. С -fanalyzer-fine-grained, каждый оператор получает своё ребро.

-fanalyzer-show-duplicate-count

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

-fno-analyzer-state-merge

Этот параметр предназначен для разработчиков анализатора.

По умолчанию анализатор пытается упростить анализ, объединяя достаточно похожие состояния в каждой точке программы при построении своего «взрывного графа». С -fno-analyzer-state-merge это объединение можно подавить для отладки проблем с обработкой состояния.

-fno-analyzer-state-purge

Этот параметр предназначен для разработчиков анализатора.

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

С -fno-analyzer-state-purge это удаление состояния можно подавить, для отладки проблем с обработкой состояния.

-fanalyzer-transitivity

Этот параметр включает транзитивность ограничений внутри анализатора.

-fanalyzer-verbose-edges

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

-fanalyzer-verbose-state-changes

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

-fanalyzer-verbosity=level

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

Значение level может быть одним из следующих:

‘0’

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

‘1’

Как и на предыдущем уровне, но также отображаются события входа в каждую функцию.

‘2’

Как и на предыдущем уровне, но также отображаются события, относящиеся к потоку управления, которые важны для срабатывания проблемы (например, «путь истинности выбран» в условном операторе).

Этот уровень является по умолчанию.

‘3’

Как и на предыдущем уровне, но отображаются все события потока управления, а не только важные.

‘4’

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

-fdump-analyzer

Вывести внутренние детали о том, что делает анализатор, в file.analyzer.txt. Этот параметр переопределяется параметром -fdump-analyzer-stderr.

-fdump-analyzer-stderr

Вывести внутренние детали о том, что делает анализатор, в stderr. Этот параметр переопределяет -fdump-analyzer.

-fdump-analyzer-callgraph

Вывести представление графа вызовов, подходящее для просмотра с помощью GraphViz, в file.callgraph.dot.

-fdump-analyzer-exploded-graph

Вывести представление «взрывного графа», подходящее для просмотра с помощью GraphViz, в file.eg.dot. Узлы имеют цветовую кодировку, основанную на состояниях автомата, чтобы подчеркнуть изменения состояний.

-fdump-analyzer-exploded-nodes

Вывести диагностические сообщения, показывающие, где узлы «взрывного графа» находятся относительно исходного кода программы.

-fdump-analyzer-exploded-nodes-2

Вывести текстовое представление «взрывного графа» в file.eg.txt.

-fdump-analyzer-exploded-nodes-3

Вывести текстовое представление «взрывного графа» в отдельный файл на узел в file.eg-id.txt. Обычно это большое количество файлов.

-fdump-analyzer-exploded-paths

Вывести текстовое представление «взрывного пути» для каждого диагностического сообщения в file.idx.kind.epath.txt.

-fdump-analyzer-feasibility

Вывести внутренние детали поиска выполнимых путей анализатором. Детали записываются в формате, подходящем для просмотра с помощью GraphViz, в файлы с именами вида file.*.fg.dot, file.*.tg.dot и file.*.fpath.txt.

-fdump-analyzer-json

Вывести сжатое представление анализатора в формате JSON в file.analyzer.json.gz. Точный формат может изменяться.

-fdump-analyzer-state-purge

Как и -fdump-analyzer-supergraph, вывести представление «суперграфа», подходящее для просмотра с помощью GraphViz, но аннотировать граф информацией о том, какое состояние будет удалено в каждом узле. Граф записывается в file.state-purge.dot.

-fdump-analyzer-supergraph

Вывести представления «суперграфа», подходящие для просмотра с помощью GraphViz, в file.supergraph.dot и file.supergraph-eg.dot. Они показывают все графы потока управления в программе с межпроцедурными рёбрами для вызовов и возвратов. Второй вывод содержит аннотации, показывающие узлы «взрывного графа» и связанные с ними диагностические сообщения.

-fdump-analyzer-untracked

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

Далее: Параметры отладки, Предыдущее: Параметры предупреждений, Наверх: Вызов GCC [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Static-Analyzer-Options.html

Spec-Zone.ru

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