Copyright (C) 2023 Jiacai Cui [email protected]
Это простая структура статического анализа CPP, разработанная во время программной инженерной лаборатории Университета Нанкин.
Проект является личным и распространяется по общедоступной публичной лицензии GNU.
Дизайн этого проекта хорошо вдохновлен Tai-E, статической структурой анализа Java, пожалуйста, просмотрите его отчет о технике для получения более подробной информации.
Этот статический анализатор CPP использует Clang в качестве переднего конца. Таким образом, вам нужно установить LLVM и зацепить свою локальную систему, чтобы создать и запустить этот проект. Он разработан в соответствии с LLVM 16.0.2, тестируется в соответствии с LLVM 16.0.2 и 17.0.0, но более поздние версии также должны быть в порядке.
Рекомендуется установить LLVM с использованием предварительно скомпилированных двоичных файлов вместо того, чтобы строить из источника вручную.
Вот способ настроить правильную среду этого проекта.
Используйте Homebrew в качестве менеджера пакетов, запустите
brew install cmake ninja llvm doxygenЗатем проверьте установленную версию Cmake, Ninja, LLVM и Clang by
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionИспользуя источник APT LLVM, запустите
sudo apt update
sudo apt install lsb-release wget software-properties-common gnupg zlib1g zlib1g-dev git cmake ninja-build build-essential doxygen graphviz
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
./llvm.sh 17 allЗатем проверьте установленную версию Cmake, Ninja, LLVM и Clang by
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.gitВ каталоге Project Root, запустите
mkdir build
cd build
cmake -G=Ninja ..
ninjaПосле компиляции, в каталоге проекта Root , запустите
./build/tests/testsИ затем вы должны увидеть что -то вроде ниже, что означает, что утверждения о тестировании 627 передаются.
# a lot of log information here ...
===============================================================================
[doctest] test cases: 35 | 35 passed | 0 failed | 0 skipped
[doctest] assertions: 627 | 627 passed | 0 failed |
[doctest] Status: SUCCESS !После компиляции, в каталоге проекта Root , запустите
./build/tools/reaching-definition-analyzer --source-dir=resources/dataflow/ReachDef Это запустит анализ определения достижения всех исходных файлов в каталоге resources/dataflow/ReachDef .
./build/tools/reaching-definition-analyzer --help
A Simple CPP Reaching Definition Static Analyzer
Copyright (c) 2023-2023
Usage: ./build/tools/reaching-definition-analyzer/reaching-definition-analyzer [OPTIONS]
Options:
-h,--help Print this help message and exit
-S,--source-dir TEXT REQUIRED
directory of all source files
-I,--include-dir TEXT directory of all header files
--std,--standard TEXT c++ language standard (support all standards that clang supports)Точно так же в каталоге проекта root , запустите
./build/tools/live-variable-analyzer --source-dir=resources/dataflow/LiveVar Это запустит анализ живых переменных для всех исходных файлов в каталоге resources/dataflow/LiveVar .
./build/tools/live-variable-analyzer --help
A Simple CPP Live Variable Static Analyzer
Copyright (c) 2023-2023
Usage: ./build/tools/live-variable-analyzer [OPTIONS]
Options:
-h,--help Print this help message and exit
-S,--source-dir TEXT REQUIRED
directory of all source files
-I,--include-dir TEXT directory of all header files
--std,--standard TEXT c++ language standard (support all standards that clang supports)Step01 : Возьмите этот репозиторий в качестве подмодуля вашего репозитория вашего проекта.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project Step02 : Ссылка на libanalyzer in you CMakeLists.txt .
# suppose your target is called your_target
add_subdirectory ( path /to/put/this/project)
target_include_directories (your_target
PUBLIC path /to/put/this/project/ include
)
target_link_libraries (your_target
libanalyzer
)Step03 : Используйте API, предоставленные здесь в вашем исходном коде. Пример использования приведен в тесте достижения определения.
Вы можете построить документацию HTML Doxygen API локально в каталоге сборки , работая
# in the build directory
ninja libanalyzer-api-doc И вы найдете вашу документацию HTML, расположенную в каталоге build/docs/api-doc/html .
Вы можете прочитать его, открыв build/docs/api-doc/html/index.html в вашем локальном веб-браузере.
Обратите внимание, что документация не включена в цель сборки по умолчанию.
Вы должны построить его явно, как выше, если вам нужно прочитать его.