From 007afda3d10c9c0ac8c72b24af8fa4df6f0db8a9 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Wed, 8 Apr 2020 20:09:58 +0300 Subject: [PATCH] update --- .../CMake управление проектом.adoc | 3 +- wiki/Prog/Development/PVS-Studio.adoc | 130 ++---------------- .../Development/Статический анализ кода.adoc | 34 +++-- 3 files changed, 39 insertions(+), 128 deletions(-) diff --git a/wiki/Prog/Development/CMake управление проектом.adoc b/wiki/Prog/Development/CMake управление проектом.adoc index bafb808..ec2045a 100644 --- a/wiki/Prog/Development/CMake управление проектом.adoc +++ b/wiki/Prog/Development/CMake управление проектом.adoc @@ -52,8 +52,7 @@ Hitchhiker’s Guide to the CMake] Назначение каталогов приведено в таблице. -.Назначение каталогов -[cols="2m,4",options="header",] +[cols="2,4",options="header",] |=== |Каталог |Назначение |`cmex/_build` |Результаты компиляции diff --git a/wiki/Prog/Development/PVS-Studio.adoc b/wiki/Prog/Development/PVS-Studio.adoc index 7cd789d..ad09c97 100644 --- a/wiki/Prog/Development/PVS-Studio.adoc +++ b/wiki/Prog/Development/PVS-Studio.adoc @@ -1,116 +1,16 @@ -= PVS-Studio -:category: Программирование -:tags: программирование, C, C++, отладка, +Описание Переменная kFlat kOpt kStandard kUser kHome +Путь к каталогу с исполняемым файлом m_binaryDirectory . /opt/proj/bin /usr/bin _build/Debug/bin $HOME/.local/bin +Имя проекта, которое используется при формировании имён файлов и каталогов m_projectName proj proj proj proj proj +Путь к пользовательскому каталогу с файлами настройки m_userConfigDirectory $HOME/.config/proj $HOME/.config/proj $HOME/.config/proj $HOME/.config/proj $HOME/.config/proj +Путь к системному каталогу с файлами настройки m_systemConfigDirectory . /opt/proj/etc /etc/proj _build/Debug/etc $HOME/.config/proj +Имя файла настройки m_configFileName proj.conf proj.conf proj.conf proj.conf proj.conf +Расширение для файла настройки m_configFileExtension conf conf conf conf conf +Путь к пользовательскому каталогу с изменяемыми файлами m_userVarDataDirectory $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib $HOME/.local/share/proj/lib +Путь к системному каталогу с изменяемыми файлами m_systemVarDataDirectory . /opt/proj/files/lib /var/lib/proj _build/Debug/files/lib $HOME/.local/share/proj/lib +Путь к пользовательскому каталогу с неизменяемыми файлами m_userConstDataDirectory $HOME/.local/share/proj/data $HOME/.local/share/proj/data $HOME/.local/share/proj/data $HOME/.local/share/proj/data $HOME/.local/share/proj/data +Путь к системному каталогу с неизменяемыми файлами m_systemConstDataDirectory . /opt/proj/files/data /usr/share/proj _build/Debug/files/data $HOME/.local/share/proj/data +Путь к пользовательскому каталогу с журналами работы m_userLogDirectory $HOME/.local/share/proj/log $HOME/.local/share/proj/log $HOME/.local/share/proj/log $HOME/.local/share/proj/log $HOME/.local/share/proj/log +Путь к системному каталогу с журналами работы m_systemLogDirectory . /opt/proj/files/log /var/log/proj _build/Debug/files/log $HOME/.local/share/proj/log +Путь к каталогу с временными файлами m_tempDirectory $TMPDIR $TMPDIR $TMPDIR $TMPDIR $TMPDIR +Путь к домашнему каталогу текущего пользователя m_homeDirectory $HOME $HOME $HOME $HOME $HOME -:toc: - -== Информация и лицензия - -https://www.viva64.com/ru/pvs-studio/[PVS-Studio] — это инструмент для -статического анализа исходного кода программ, написанных на языках С, -C++. - -Для использования в Linux нужно чтобы в каталоге `~/.config/PVS-Studio` -находился лицензионный ключ или в начале исходных файлов с расширениями -`*.c`, `*.cpp`, `*.cxx` и т.п. -https://www.viva64.com/ru/b/0457/[присутствовали строки] - -.... -// This is an independent project of an individual developer. Dear PVS-Studio, please check it. - -// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com -.... - -== Настройка и компиляция проекта - -Полное руководство для работы в Linux находится -https://www.viva64.com/ru/m/0036/[здесь], а ниже приведён список типовых -команд. - -Настройка проекта для CMake: - -[source,sh] ----- -cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=On ----- - -Сборка проекта с помощью `make`: - -[source,sh] ----- -pvs-studio-analyzer trace -- make -j$(nproc) ----- - -Настройка и сборка проекта с использованием Ninja: - -[source,sh] ----- -cmake -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=On -ninja -t compdb ----- - -== Анализ проекта - -Для анализа проектов используется утилита `pvs-studio-analyzer`. По -умолчанию включены только диагностики общего назначения (General -Analysis, GA). Включить дополнительные правила можно с помощью опции -`-a`: - -.... - -a [MODE], --analysis-mode [MODE] - MODE defines the type of warnings: - 1 - 64-bit errors; - 2 - reserved; - 4 - General Analysis; - 8 - Micro-optimizations; - 16 - Customers Specific Requests; - 32 - MISRA. - Modes can be combined by adding the values - Default: 4 -.... - -Выбор типов предупреждений осуществляется на основе побитовой маски из -приведённых выше типов. Чтобы выполнить анализ, исключив проверки MISRA, -нужно выполнить - -[source,sh] ----- -pvs-studio-analyzer analyze -a 29 -j$(nproc) -o pvs.log ----- - -Составление отчёта для просмотра в Qt Creator: - -[source,sh] ----- -plog-converter -t tasklist -o pvs.tasks pvs.log ----- - -При составлении отчёта уровень детализации можно изменять с помощью -ключа `-a` (`--analyzer`), который производит фильтрацию предупреждений -согласно маске, которая имеет вид `MessageType:MessageLevels`, где -`MessageType` может принимать один из следующих типов: `GA`, `OP`, `64`, -`CS`, `MISRA`, а `MessageLevels` может принимать значения от `1` до `3`. -Возможна комбинация разных масок через `;`. Например, при составлении -отчёта для просмотра в формате HTML можно повысить уровень детализации: - -[source,sh] ----- -plog-converter -t fullhtml -a "GA:1,2,3;64:1;OP:1,2;CS:1,2" -o html pvs.log ----- - -Составление отчёта для редактора Vim: - -[source,sh] ----- -plog-converter -a "GA:1,2" -t errorfile -o pvs.err pvs.log ----- - -Для просмотра отчёта в редакторе Vim нужно открыть файл `pvs.err` и -выполнить команды: - -[source,vim] ----- -:set makeprg=cat\ % " выбор программы для компиляции в текущей сессии -:silent make " имитация сборки -:cw " открытие результатов в нижнем окне ----- diff --git a/wiki/Prog/Development/Статический анализ кода.adoc b/wiki/Prog/Development/Статический анализ кода.adoc index ef5b8e3..e077ac8 100644 --- a/wiki/Prog/Development/Статический анализ кода.adoc +++ b/wiki/Prog/Development/Статический анализ кода.adoc @@ -13,14 +13,14 @@ [source,sh] ---- -sudo apt-get install clang-tidy-6.0 +sudo apt-get install clang-tidy-10 ---- Использование: [source,sh] ---- -cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source +cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source ---- В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со @@ -30,12 +30,25 @@ cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source ---- --- Checks: '-*, - clang-diagnostic-*, - readability-*, - modernize-*, - cppcoreguidelines-*, - google-*, - bugprone-*' +bugprone-*, +clang-analyzer-*, +cppcoreguidelines-*, +google-*, +llvm-*, +misc-*, +modernize-*, +readability-*, +performance-*, +portability-*, +-cppcoreguidelines-owning-memory, +-cppcoreguidelines-avoid-magic-numbers, +-cppcoreguidelines-pro-bounds-array-to-pointer-decay, +-readability-magic-numbers, +-readability-else-after-return, +-modernize-use-trailing-return-type, +-modernize-avoid-c-arrays, +-performance-no-automatic-move, +' CheckOptions: - key: readability-identifier-naming.ClassCase value: CamelCase @@ -124,7 +137,7 @@ cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE .. [source,sh] ---- -sudo apt-get install clazy clang-6.0 +sudo apt-get install clazy clang-9 ---- Использование: @@ -132,7 +145,6 @@ sudo apt-get install clazy clang-6.0 [source,sh] ---- CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy .. -CLANGXX=clang++-6.0 make +CLANGXX=clang++-9 make ---- -=== PVS-Studio