Copyright (c) 2023 Jiacai Cui [email protected]
Este es un marco de análisis estático CPP simple desarrollado durante un curso de laboratorio de ingeniería de software de la Universidad de Nanjing.
El proyecto es personal y se distribuye bajo la Licencia Pública General de GNU.
El diseño de este proyecto está bien inspirado en Tai-E, un marco de análisis estático para Java, vea su informe técnico para obtener más detalles.
Este analizador estático CPP usa Clang como su parte delantera. Por lo tanto, debe instalar LLVM y CLANG en su sistema local en orden para construir y ejecutar este proyecto. Se desarrolla bajo LLVM 16.0.2, probado bajo LLVM 16.0.2 y 17.0.0, pero las versiones más recientes también deberían estar bien.
Se recomienda instalar LLVM utilizando binarios precompilados en lugar de construir desde la fuente manualmente.
Aquí está la forma de configurar el entorno adecuado de este proyecto.
Use Homebrew como Administrador de paquetes, ejecute
brew install cmake ninja llvm doxygenLuego, verifique su versión instalada de CMake, Ninja, LLVM y Clang por
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionUsando la fuente de apt LLVM, ejecute
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 allLuego, verifique su versión instalada de CMake, Ninja, LLVM y Clang por
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.gitEn el directorio root del proyecto, ejecute
mkdir build
cd build
cmake -G=Ninja ..
ninjaDespués de compilar, en el directorio de la raíz del proyecto , ejecute
./build/tests/testsY luego, debería ver algo como a continuación, lo que significa que se aproban las afirmaciones de pruebas 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 !Después de compilar, en el directorio de la raíz del proyecto , ejecute
./build/tools/reaching-definition-analyzer --source-dir=resources/dataflow/ReachDef Esto ejecutará el análisis de definición de alcance para todos los archivos de origen en el directorio 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)Del mismo modo, en el directorio de la raíz del proyecto , ejecute
./build/tools/live-variable-analyzer --source-dir=resources/dataflow/LiveVar Esto ejecutará el análisis de variable en vivo para todos los archivos de origen en el directorio 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)Paso 01 : tome este repositorio como un submódulo de su repositorio de proyecto.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project Paso 02 : enlace a libanalyzer en usted 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
)Paso 03 : use API proporcionadas aquí en su código fuente. Se proporciona un uso de ejemplo en la prueba de alcanzar la definición.
Puede construir la documentación de la API de doxygen HTML localmente en el directorio de compilación ejecutando
# in the build directory
ninja libanalyzer-api-doc Y encontrará su documentación HTML ubicada en el directorio build/docs/api-doc/html .
Puede leerlo abriendo build/docs/api-doc/html/index.html en su navegador web local.
Tenga en cuenta que la documentación no está incluida en el objetivo de compilación predeterminado.
Debe construirlo explícitamente como arriba si necesita leerlo.