靜態(tài)分析器 Clang Static Analyzer (2) CodeChecker
??想了解更多關(guān)于開源的內(nèi)容,請訪問:??
1、Clang Static Analyzer介紹
Clang 靜態(tài)分析器CSA是一個源代碼分析工具,可查找 C、C++ 和 Objective-C 程序的bugs。
目前可以從命令行中運行,或者如果您使用 macOS,則可以在 Xcode 中使用。當從命令行中運行時,該工具和代碼構(gòu)建串聯(lián)運行。
該分析器是100%開源的,是Clang項目的一部分。類似Clang的其他工具,它實現(xiàn)為C++庫,可以被其他工具和應用調(diào)用。
2、Clang Static Analyzer命令行工具
靜態(tài)分析器在設(shè)計上是一個 GUI 工具。其目的是找到程序中的錯誤執(zhí)行路徑,這些路徑很難通過查看非交互式標準輸出進行獲取。但是,可以從命令行調(diào)用靜態(tài)分析器來獲取分析結(jié)果,稍后在圖形界面中以交互方式查看分析結(jié)果。以下兩個工具通常用于從命令行運行分析器,這兩種工具都是封裝的腳本,用于分析結(jié)果、調(diào)用底層的Clang編譯器:
- Scan-Build是一個古老而簡單的命令行工具,可在編譯項目時輸出HTML文件。用于查看靜態(tài)分析器警告。您可以在 Web 瀏覽器中查看分析結(jié)果。
- 對于只想在辦公桌上或在非常簡單的協(xié)作環(huán)境中查看靜態(tài)分析結(jié)果的個人開發(fā)人員非常有用。
- 適用于所有主要平臺(Windows,Linux,macOS),并且在許多Linux發(fā)行版中作為軟件包提供。
- 不包括對交叉翻譯單元分析的支持cross-translation-unit analysis。
- CodeChecker是一個 Web 服務器,它按需在項目上運行靜態(tài)分析器,并維護問題數(shù)據(jù)庫。
- 非常適合在協(xié)作環(huán)境中管理大量靜態(tài)分析器警告。
- 通常比scan-build功能更豐富。
- 支持增量分析:結(jié)果可以存儲在數(shù)據(jù)庫中,后續(xù)分析運行可以對比,列出新添加的缺陷。
- 通過 CodeChecker 在 Linux 上完全支持交叉翻譯單元 (Cross Translation Unit ,CTU) 分析。
- 也可以運行clang-tidy checker檢查器。
- 開源,但是開源項目之外,即不是LLVM項目的一部分。
3、CodeChecker工具
CodeChecker 是一個靜態(tài)分析工具,基于LLVM/Clang Static Analyzer工具鏈進行構(gòu)建的,用來替代scan-build工具,可以用于Linux或macOS開發(fā)環(huán)境上。
CodeChecker工具屬于python的庫文件,維護在pypi上。安裝該工具,使用命令如下:
還需要安裝下cppcheck等,命令如下:
另外,需要使用下述環(huán)境變量,在~/openharmony/prebuilts/clang/ohos/linux-x86_64/llvm/bin目錄下有clang-tidy等命令行工具會使用到。
4、CodeChecker基本用法
繼續(xù)使用之前提供一個簡單的示例文件simple.c,里面包含明顯的錯誤。
以及使用到的Makefile:
(1)CodeChecker log生成分析日志
執(zhí)行如下命令,在編譯的時候生成分析日志。
執(zhí)行輸出信息如下:
生成的文件內(nèi)容比較簡單:
(2)CodeChecker analyze分析工程
執(zhí)行如下命令,輸出分析報告。reports文件夾下主要是些plist文件,屬于xml格式的文件,用于記錄編譯錯誤信息。
(3)CodeChecker parse查看分析結(jié)果
可以使用如下命令,使用純文本方式展示分析出來的缺陷以及統(tǒng)計信息。
上述命令易讀性較差,可以使用下述命令,在瀏覽器里查看。使用瀏覽器Firefox或MS Edge打開./reports_html/index.html即可。
缺陷列表示意圖如下:
分析結(jié)果統(tǒng)計信息如下:
缺陷展示頁面如下:
(4)CodeChecker store存儲分析結(jié)果
可以使用CodeChecker server命令創(chuàng)建一個Web站點,然后執(zhí)行CodeChecker store命令把分析結(jié)果存儲在數(shù)據(jù)庫。然后通過瀏覽器http://localhost:8555/Default進行網(wǎng)頁訪問,可以在瀏覽器上對分析結(jié)果進行管理。