حقوق الطبع والنشر (C) 2023 Jiacai Cui [email protected]
هذا هو إطار تحليل ثابت CPP ثابت تم تطويره خلال دورة مختبر هندسة البرمجيات في جامعة نانجينغ.
المشروع شخصي وموزع بموجب رخصة عامة عامة في GNU.
إن تصميم هذا المشروع مستوحى جيدًا من Tai-E ، وهو إطار تحليل ثابت لـ Java ، يرجى الاطلاع على تقرير التقنية لمزيد من التفاصيل.
يستخدم محلل CPP Static Clang كواجهة أمامية. لذلك تحتاج إلى تثبيت LLVM و clang على نظامك المحلي Inorder لإنشاء هذا المشروع وتشغيله. تم تطويره تحت 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 --versionباستخدام مصدر LLVM 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 : رابط إلى libanalyzer في 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 : استخدم واجهات برمجة التطبيقات المقدمة هنا في رمز المصدر الخاص بك. يتم توفير مثال على الاستخدام في اختبار الوصول إلى التعريف.
يمكنك إنشاء وثائق API Doxygen HTML محليًا في دليل الإنشاء عن طريق التشغيل
# in the build directory
ninja libanalyzer-api-doc وستجد وثائق HTML الموجودة في دليل build/docs/api-doc/html .
يمكنك قراءته عن طريق فتح build/docs/api-doc/html/index.html في متصفح الويب المحلي.
لاحظ أن الوثائق غير مدرجة في هدف الإنشاء الافتراضي.
يجب أن تبنيها بشكل صريح كما أعلاه إذا كنت بحاجة إلى قراءتها.