版权(C)2023 Jiacai Cui [email protected]
这是一个简单的CPP静态分析框架,在南京大学的软件工程实验室课程中开发了。
该项目是个人的,并根据GNU通用公共许可证分发。
该项目的设计受到了Tai-E的启发,Tai-E是Java的静态分析框架,请查看其技术报告以获取更多详细信息。
该CPP静态分析仪使用Clang作为前端。因此,您需要在本地系统上安装LLVM和Clang,以构建和运行此项目。它是根据LLVM 16.0.2开发的,根据LLVM 16.0.2和17.0.0进行了测试,但最新版本也应该是可以的。
建议使用预编译的二进制文件安装LLVM,而不是手动构建。
这是设置该项目适当环境的方法。
使用自制者作为软件包经理,运行
brew install cmake ninja llvm doxygen然后,检查您已安装的CMAKE,NINJA,LLVM和CLANG的版本
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --version使用LLVM APT源,运行
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的版本
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.git在项目根目录中,运行
mkdir build
cd build
cmake -G=Ninja ..
ninja编译后,在项目根目录中运行
./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 !编译后,在项目根目录中运行
./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)同样,在项目根目录中,运行
./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步骤02 :链接到您的CMakeLists.txt中的libanalyzer 。
# 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
)步骤03 :使用源代码中提供的API。在达到定义的测试中提供了一个示例用法。
您可以通过运行在构建目录中本地构建HTML Doxygen API文档
# in the build directory
ninja libanalyzer-api-doc并且您会找到位于build/docs/api-doc/html目录的HTML文档。
您可以通过在本地Web浏览器中打开build/docs/api-doc/html/index.html来阅读它。
请注意,该文档不包括在默认构建目标中。
如果需要阅读,则必须像上面一样明确构建它。