Hak Cipta (C) 2023 Jiacai Cui [email protected]
Ini adalah kerangka kerja analisis statis CPP sederhana yang dikembangkan selama kursus lab rekayasa perangkat lunak dari Nanjing University.
Proyek ini pribadi dan didistribusikan di bawah Lisensi Publik Umum GNU.
Desain proyek ini terinspirasi oleh Tai-E, kerangka analisis statis untuk Java, silakan lihat laporan tekniknya untuk lebih jelasnya.
Penganalisa statis CPP ini menggunakan dentang sebagai ujung depan. Jadi, Anda perlu menginstal LLVM dan melengkung pada sistem lokal Anda untuk membangun dan menjalankan proyek ini. Ini dikembangkan di bawah LLVM 16.0.2, diuji di bawah LLVM 16.0.2 dan 17.0.0, tetapi versi yang lebih baru juga harus baik -baik saja.
Disarankan untuk menginstal LLVM menggunakan biner yang diolah alih -alih membangun dari sumber secara manual.
Inilah cara untuk mengatur lingkungan yang tepat dari proyek ini.
Gunakan homebrew sebagai manajer paket, jalankan
brew install cmake ninja llvm doxygenKemudian, periksa versi CMake, Ninja, LLVM, dan Clang yang terpasang
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionMenggunakan Sumber Apt LLVM, Jalankan
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 allKemudian, periksa versi CMake, Ninja, LLVM, dan Clang yang terpasang
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.gitDi direktori proyek root, jalankan
mkdir build
cd build
cmake -G=Ninja ..
ninjaSetelah menyusun, di direktori root proyek , jalankan
./build/tests/testsDan kemudian, Anda harus melihat sesuatu seperti di bawah ini, yang berarti pernyataan pengujian 627 disahkan.
# 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 !Setelah menyusun, di direktori root proyek , jalankan
./build/tools/reaching-definition-analyzer --source-dir=resources/dataflow/ReachDef Ini akan menjalankan analisis definisi jangkauan untuk semua file sumber di Direktori 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)Demikian pula, di direktori root proyek , jalankan
./build/tools/live-variable-analyzer --source-dir=resources/dataflow/LiveVar Ini akan menjalankan analisis variabel langsung untuk semua file sumber di direktori 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)Langkah01 : Ambil repositori ini sebagai submodul dari repositori proyek Anda.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project Langkah02 : Tautan ke libanalyzer di 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
)Langkah03 : Gunakan API yang disediakan di sini dalam kode sumber Anda. Contoh penggunaan disediakan dalam tes definisi mencapai.
Anda dapat membangun dokumentasi API Doxygen HTML secara lokal di direktori build dengan menjalankan
# in the build directory
ninja libanalyzer-api-doc Dan Anda akan menemukan dokumentasi HTML Anda yang terletak di direktori build/docs/api-doc/html .
Anda dapat membacanya dengan membuka build/docs/api-doc/html/index.html di browser web lokal Anda.
Perhatikan bahwa dokumentasi tidak termasuk dalam target build default.
Anda harus membangunnya secara eksplisit seperti di atas jika Anda perlu membacanya.