Spec-Zone.ru › GCC 11

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

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-possible-null-argument 
-Wanalyzer-possible-null-dereference 
-Wanalyzer-null-argument 
-Wanalyzer-null-dereference 
-Wanalyzer-shift-count-negative 
-Wanalyzer-shift-count-overflow 
-Wanalyzer-stale-setjmp-buffer 
-Wanalyzer-tainted-array-index 
-Wanalyzer-unsafe-call-within-signal-handler 
-Wanalyzer-use-after-free 
-Wanalyzer-use-of-pointer-in-stale-stack-frame 
-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 для его отключения.

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

-Wno-analyzer-possible-null-dereference

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

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

-Wno-analyzer-null-argument

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

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

-Wno-analyzer-null-dereference

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

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

-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-array-index

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

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

-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

Это предупреждение требует -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 для его отключения.

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

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

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

-fanalyzer-call-summaries

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

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

-fanalyzer-checker=name

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

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

-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

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

Значение уровень может быть одним из:

‘0’

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

‘1’

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

‘2’

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

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

‘3’

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

‘4’

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

-fdump-analyzer

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

-fdump-analyzer-stderr

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

-fdump-analyzer-callgraph

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

-fdump-analyzer-exploded-graph

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

-fdump-analyzer-exploded-nodes

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

-fdump-analyzer-exploded-nodes-2

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

-fdump-analyzer-exploded-nodes-3

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

-fdump-analyzer-feasibility

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

-fdump-analyzer-json

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

-fdump-analyzer-state-purge

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

-fdump-analyzer-supergraph

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

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

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

Spec-Zone.ru

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