Copyright (C) 2023 Jiacai Cui [email protected]
Il s'agit d'un cadre d'analyse statique CPP simple développé lors d'un cours de laboratoire de génie logiciel de l'Université Nanjing.
Le projet est personnel et distribué en vertu de la licence publique générale de GNU.
La conception de ce projet est bien inspirée par Tai-E, un cadre d'analyse statique pour Java, veuillez consulter son rapport technique pour plus de détails.
Cet analyseur statique CPP utilise Clang comme frontal. Vous devez donc installer LLVM et Cang sur votre système local pour construire et exécuter ce projet. Il est développé sous LLVM 16.0.2, testé sous LLVM 16.0.2 et 17.0.0, mais les versions plus récentes devraient également être OK.
Il est recommandé d'installer LLVM en utilisant des binaires précompilés au lieu de construire manuellement de la source à partir de la source.
Voici le moyen de mettre en place l'environnement approprié de ce projet.
Utilisez Homebrew comme gestionnaire de packages, exécutez
brew install cmake ninja llvm doxygenEnsuite, vérifiez votre version installée de Cmake, Ninja, LLVM et Clang par
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionEn utilisant la source LLVM APT, exécutez
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 allEnsuite, vérifiez votre version installée de Cmake, Ninja, LLVM et Clang par
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.gitDans le répertoire des racines du projet, exécutez
mkdir build
cd build
cmake -G=Ninja ..
ninjaAprès avoir compilé, dans le répertoire des racines du projet , exécutez
./build/tests/testsEt puis, vous devriez voir quelque chose comme ci-dessous, ce qui signifie que les assertions de test 627 sont passées.
# 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 !Après avoir compilé, dans le répertoire des racines du projet , exécutez
./build/tools/reaching-definition-analyzer --source-dir=resources/dataflow/ReachDef Cela exécutera l'analyse de définition d'atteindre tous les fichiers source dans le répertoire 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)De même, dans le répertoire des racines du projet , exécutez
./build/tools/live-variable-analyzer --source-dir=resources/dataflow/LiveVar Cela exécutera l'analyse des variables en direct pour tous les fichiers source dans le répertoire 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 : Prenez ce référentiel en tant que sous-module de votre référentiel de projet.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project Step02 : Lien vers libanalyzer dans vous 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 : Utilisez des API fournies ici dans votre code source. Un exemple d'utilisation est fourni dans le test d'atteindre la définition.
Vous pouvez construire localement la documentation de l'API HTML Doxygen dans le répertoire de construction en exécutant
# in the build directory
ninja libanalyzer-api-doc Et vous trouverez votre documentation HTML située au répertoire build/docs/api-doc/html .
Vous pouvez le lire en ouvrant build/docs/api-doc/html/index.html dans votre navigateur Web local.
Notez que la documentation n'est pas incluse dans la cible de construction par défaut.
Vous devez le construire explicitement comme ci-dessus si vous avez besoin de le lire.