저작권 (C) 2023 Jiacai Cui [email protected]
이것은 Nanjing University의 소프트웨어 엔지니어링 실험실 과정에서 개발 된 간단한 CPP 정적 분석 프레임 워크입니다.
이 프로젝트는 개인적이며 GNU 일반 공개 라이센스에 따라 배포됩니다.
이 프로젝트의 디자인은 Java의 정적 분석 프레임 워크 인 Tai-E에서 잘 영감을 얻었으므로 자세한 내용은 기술 보고서를 참조하십시오.
이 CPP 정적 분석기는 Clang을 프론트 엔드로 사용합니다. 따라서이 프로젝트를 구축하고 실행하려면 로컬 시스템에 LLVM 및 Clang을 설치해야합니다. LLVM 16.0.2에 따라 개발되었으며 LLVM 16.0.2 및 17.0.0에 따라 테스트되었지만 최근 버전도 괜찮습니다.
소스에서 수동으로 구축하는 대신 사전 컴파일 된 바이너리를 사용하여 LLVM을 설치하는 것이 좋습니다.
이 프로젝트의 적절한 환경을 설정하는 방법은 다음과 같습니다.
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 디렉토리의 모든 소스 파일에 대한 도달 정의 분석이 실행됩니다.
./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)마찬가지로 프로젝트 루트 디렉토리에서 실행하십시오
./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)STEP01 :이 저장소를 프로젝트 저장소의 하위 모듈로 가져갑니다.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project STEP02 : 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
)STEP03 : 소스 코드에 제공된 API를 사용하십시오. 정의 도달 테스트에서 예제 사용이 제공됩니다.
실행하여 빌드 디렉토리에 로컬로 HTML Doxygen API 문서를 빌드 할 수 있습니다.
# in the build directory
ninja libanalyzer-api-doc 또한 build/docs/api-doc/html 디렉토리에있는 HTML 문서를 찾을 수 있습니다.
로컬 웹 브라우저에서 build/docs/api-doc/html/index.html 열어 읽을 수 있습니다.
문서는 기본 빌드 대상에 포함되어 있지 않습니다.
읽어야 할 경우 위의 명시 적으로 명시 적으로 구축해야합니다.