Copyright (c) 2023 jiacai cui [email protected]
Esta é uma estrutura de análise estática simples de CPP desenvolvida durante um curso de laboratório de engenharia de software da Universidade de Nanjing.
O projeto é pessoal e distribuído sob licença pública geral da GNU.
O design deste projeto é bem inspirado pelo TAII-E, uma estrutura de análise estática para o Java, veja seu relatório de técnica para obter mais detalhes.
Este analisador estático do CPP usa Clang como seu front -end. Portanto, você precisa instalar o LLVM e o CLANG em seu sistema local para construir e executar este projeto. É desenvolvido sob o LLVM 16.0.2, testado sob LLVM 16.0.2 e 17.0.0, mas versões mais recentes também devem estar bem.
Recomenda -se instalar LLVM usando binários pré -compilados em vez de construir a partir da fonte manualmente.
Aqui está a maneira de configurar o ambiente adequado deste projeto.
Use Homebrew como gerente de pacotes, execute
brew install cmake ninja llvm doxygenEm seguida, verifique sua versão instalada do CMake, Ninja, LLVM e CLANG BY
cmake --version
ninja --version
llvm-config --version
clang --version
doxygen --versionUsando a fonte do LLVM APT, execute
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 allEm seguida, verifique sua versão instalada do CMake, Ninja, LLVM e CLANG BY
cmake --version
ninja --version
clang-17 --version
llvm-config-17 --version
doxygen --versiongit clone https://github.com/JacyCui/cpp-static-analyzer.gitNo diretório raiz do projeto, execute
mkdir build
cd build
cmake -G=Ninja ..
ninjaApós a compilação, no diretório raiz do projeto , execute
./build/tests/testsE então, você deve ver algo como abaixo, o que significa que as 627 asserções de teste são passadas.
# 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 !Após a compilação, no diretório raiz do projeto , execute
./build/tools/reaching-definition-analyzer --source-dir=resources/dataflow/ReachDef Isso executará a análise de definição de alcance para todos os arquivos de origem no diretório 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)Da mesma forma, no diretório raiz do projeto , execute
./build/tools/live-variable-analyzer --source-dir=resources/dataflow/LiveVar Isso executará a análise de variáveis ao vivo para todos os arquivos de origem no diretório 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)Etapa01 : Pegue este repositório como um submódulo do seu repositório de projeto.
git submodule add https://github.com/JacyCui/cpp-static-analyzer.git path/to/put/this/project Etapa02 : Link para libanalyzer em você 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
)Etapa03 : Use as APIs fornecidas aqui em seu código -fonte. Um exemplo de uso é fornecido no teste de alcance da definição.
Você pode construir a documentação da API html doxygen localmente no diretório de construção executando
# in the build directory
ninja libanalyzer-api-doc E você encontrará sua documentação HTML localizada no diretório build/docs/api-doc/html .
Você pode lê-lo abrindo build/docs/api-doc/html/index.html no navegador da Web local.
Observe que a documentação não está incluída no destino de construção padrão.
Você deve construí -lo explicitamente como acima, se precisar lê -lo.