Spec-Zone.ru › GCC 10

Далее: Параметры для отладки вашей программы, Предыдущее: Параметры для запроса или подавления предупреждений, Вверх: Параметры командной строки 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-possible-null-argument 
-Wanalyzer-possible-null-dereference 
-Wanalyzer-null-argument 
-Wanalyzer-null-dereference 
-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

Этот параметр доступен только в том случае, если 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 вызванное на нём более одного раза.

-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, теряется.

-Wno-analyzer-possible-null-argument

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

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

-Wno-analyzer-possible-null-dereference

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

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

-Wno-analyzer-null-argument

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

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

-Wno-analyzer-null-dereference

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

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

-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 для его отключения.

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

-Wno-analyzer-use-after-free

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

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

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

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

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

Соответствующие параметры для управления исследованием: --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, и для их включения требуется этот параметр.

-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’

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

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

‘3’

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

‘4’

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

-fdump-analyzer

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

-fdump-analyzer-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-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-10.5.0/gcc/Static-Analyzer-Options.html

Spec-Zone.ru

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