Copyright (C) 2023 JIACAI CUI [email protected]
Dies ist ein einfaches Rahmen für statische CPP -Analysen, die während eines Software -Engineering -Labors der Nanjing University entwickelt wurden.
Das Projekt ist persönlich und unter GNU General Public Lizenz verteilt.
Das Design dieses Projekts ist von TAI-E gut inspiriert, einem statischen Analyse-Framework für Java. Weitere Informationen finden Sie in seinem Technikbericht.
Dieser statische CPP -Analysator verwendet Clang als Frontend. Sie müssen also LLVM und Clang auf Ihrem lokalen System nicht installieren, um dieses Projekt zu erstellen und auszuführen. Es wurde unter LLVM 16.0.2 entwickelt, getestet unter LLVM 16.0.2 und 17.0.0, aber neuere Versionen sollten auch in Ordnung sein.
Es wird empfohlen, LLVM mit vorkompilierten Binärdateien zu installieren, anstatt manuell aus der Quelle aus zu bauen.
Hier ist der Weg, um die richtige Umgebung dieses Projekts einzurichten.
Verwenden Sie Homebrew als Paketmanager, führen Sie aus
brew install cmake ninja llvm doxygenÜberprüfen Sie dann Ihre installierte Version von CMake, Ninja, LLVM und Clang von
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionVerwenden Sie LLVM APT -Quelle mit
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Überprüfen Sie dann Ihre installierte Version von CMake, Ninja, LLVM und Clang von
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.gitLaufen Sie im Projekt Root Directory
mkdir build
cd build
cmake -G=Ninja ..
ninjaNach dem Kompilieren im Projekt Root Directory laufen
./build/tests/testsUnd dann sollten Sie so etwas wie unten sehen, was bedeutet, dass die 627 -Testbehauptungen übergeben werden.
# 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 !Nach dem Kompilieren im Projekt Root Directory laufen
./build/tools/reaching-definition-analyzer --source-dir=resources/dataflow/ReachDef Dadurch wird die Erreichungsdefinitionsanalyse für alle Quelldateien im Verzeichnis resources/dataflow/ReachDef ausgeführt.
./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)In ähnlicher Weise laufen im Projekt Root Directory aus
./build/tools/live-variable-analyzer --source-dir=resources/dataflow/LiveVar Dadurch werden die Live -Variablenanalyse für alle Quelldateien im Verzeichnis resources/dataflow/LiveVar ausgeführt.
./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 : Nehmen Sie dieses Repository als Submodul Ihres Projektrepositorys.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project STEP02 : Link zu 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 : Verwenden Sie APIs, die hier in Ihrem Quellcode bereitgestellt werden. Eine Beispielverwendung wird im Test der Erreichung der Definition angegeben.
Sie können die HTML -Doxygen -API -Dokumentation lokal im Build -Verzeichnis durch Laufen erstellen
# in the build directory
ninja libanalyzer-api-doc Sie finden Ihre HTML-Dokumentation im Verzeichnis build/docs/api-doc/html .
Sie können es lesen, indem Sie build/docs/api-doc/html/index.html in Ihrem lokalen Webbrowser öffnen.
Beachten Sie, dass die Dokumentation nicht im Standard -Build -Ziel enthalten ist.
Sie müssen es explizit wie oben erstellen, wenn Sie es lesen müssen.