dsp-site/wiki/Prog/Development/Статический анализ кода.adoc
2020-04-08 20:09:58 +03:00

151 lines
3.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

= Статический анализ кода
:category: Программирование
:tags: программирование, отладка, cppcheck, iwyu, clang-tidy, cpplint, clazy,
== Общее описание
Ниже приведены утилиты для проверки кода на C++ и примеры их настройки и
использования совместно с https://cmake.org/[CMake].
=== http://clang.llvm.org/extra/clang-tidy/[clang-tidy]
Установка:
[source,sh]
----
sudo apt-get install clang-tidy-10
----
Использование:
[source,sh]
----
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source
----
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со
списком выполняемых проверок. Например:
[source,yaml]
----
---
Checks: '-*,
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
- key: readability-identifier-naming.ClassMemberCase
value: camelBack
...
----
Пример файла `.clang-tidy`, в котором перечислены все правила для
проверки именования идентификаторов приведён
https://git.246060.ru/f1x1t/clang-tidy-readability-identifier-naming[здесь].
=== CppCheck
Установка:
[source,sh]
----
sudo apt-get install cppcheck
----
Использование:
[source,sh]
----
cmake "-DCMAKE_CXX_CPPCHECK=/usr/bin/cppcheck;--std=c++11" path/to/source
----
This will run /usr/bin/cppcheck;std=c++11″
source=/path/to/source/file.cxx on each c++ file in the project being
built.
=== CppLint
Установка:
[source,sh]
----
sudo apt-get install python3-cpplint
----
Использование:
[source,sh]
----
cmake "-DCMAKE_CXX_CPPLINT=/usr/bin/cpplint;--linelength=79" path/to/source
----
[source,sh]
----
make -j24 2>&1 1>/dev/null | ../cpplint2tasks.pl > 222.tasks
----
This will run /usr/local/bin/cpplint linelength=79 on each c++ file in
the project being built.
=== IWYU
Установка:
[source,sh]
----
sudo apt-get install iwyu
----
Использование:
[source,sh]
----
cmake "-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=/usr/bin/iwyu;--transitive_includes_only" ..
----
This will run /usr/bin/iwyu transitive_includes_only on each c++ file
in the project being built.
=== LWYU
[source,sh]
----
cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..
----
=== Clazy
Установка:
[source,sh]
----
sudo apt-get install clazy clang-9
----
Использование:
[source,sh]
----
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
CLANGXX=clang++-9 make
----