Copyright(c)2023 Jiacai CUI [email protected]
これは、南京大学のソフトウェアエンジニアリングラボコース中に開発されたシンプルなCPP静的分析フレームワークです。
このプロジェクトは個人的なものであり、GNU一般公開ライセンスの下で配布されています。
このプロジェクトの設計は、Javaの静的分析フレームワークであるTai-Eに触発されています。詳細については、そのテクニックレポートをご覧ください。
このCPP静的アナライザーは、Clangをフロントエンドとして使用します。したがって、このプロジェクトを構築および実行するには、ローカルシステムにLLVMとClangをインストールする必要があります。 LLVM 16.0.2の下で開発され、LLVM 16.0.2および17.0.0でテストされていますが、最近のバージョンも問題ありません。
ソースから手動で構築する代わりに、事前コンパイルされたバイナリを使用してLLVMをインストールすることをお勧めします。
このプロジェクトの適切な環境を設定する方法は次のとおりです。
Package ManagerとしてHomeBrewを使用して、実行します
brew install cmake ninja llvm doxygen次に、cmake、ninja、llvm、およびclangのインストールバージョンを確認してください
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionLLVM 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ディレクトリのすべてのソースファイルのReaching定義分析が実行されます。
./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)同様に、 Project Root Directoryで実行します
./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)ステップ01 :このリポジトリをプロジェクトリポジトリのサブモジュールとして使用します。
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project Step02 :you 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を開くことで読むことができます。
ドキュメントはデフォルトのビルドターゲットに含まれていないことに注意してください。
読む必要がある場合は、上記のように明示的に構築する必要があります。