作過iOS
開發的都知道Xcode
集成的Analyzer
能夠進行代碼靜態檢查,並且確實能夠幫助分析一些潛在的bug。今天就說一說在Linux開發環境下的兩款靜態分析工具TscanCode
和scan-build
。html
目前市面上的靜態分析工具不少,爲何只拿這兩個工具呢?相對於商業軟件,它們的性能不是最優的,但倒是免費工具中比較出色的。前端
TscanCode
是騰訊出品的開源靜態代碼掃描工具,scan-build
則是LLVM
的前端工具Clang
所提供的靜態分析工具,Xcode
的Analyzer
就是藉助於scan-build
來完成靜態分析的,做爲蘋果開源的項目,其質量仍是有保證的。linux
TscanCode是一款靜態代碼掃描工具,TscanCode旨在助力開發與測試人員從代碼層面挖掘問題,將那些長期困擾項目的諸如空指針宕機等問題,扼殺於萌芽階段。支持用戶根據不一樣需求自定義配置檢查項,有極強的擴展性和可維護性。平均掃描速度10W行/分鐘。c++
TscanCode支持如下類型規則掃描:git
詳細的使用文檔在其github倉庫中,有專門的用戶手冊能夠查閱。github
咱們以開源的cgdb爲例,用TscanCode
來掃描一下這個項目。web
咱們將TscanCode
工程release/linux_bin
目錄下Linux平臺的可執行文件TscanCode
和規則配置文件夾TscanCodeConfig
拷貝到cgdb
工程的根目錄。ide
在cgdb
的根目錄執行如下命令:工具
./TscanCode --xml ./ --writefile=./result.xml --configpath=./TscanCodeConfig
參數解析:
--xml:按照xml格式輸出結果文件
./ : 須要掃描檢查的代碼路徑,此處爲全部文件。
--writefile :結果輸出文件
--configpath: 指定配置文件的路徑
更多參數能夠直接執行TscanCode查看oop
執行完畢之後,咱們能夠打開result.xml看看掃描結果。
result.xml
能夠看出來,仍是掃描出很多潛在漏洞的。
Scan-build 是一個命令行工具,它可以幫助使用者運行靜態分析器檢查他們的代碼, 找出代碼的缺陷。
當一個項目在構建中,源文件在編譯時同時也被靜態分析器有序的檢查着。當構建完成時,結構將會做爲一個web網頁的形式呈現給使用者。
你如何編寫代碼與scan-build是沒有任何關係的。經過重寫cc和cxx環境變量來改變你的編譯環境,scan-build可使用一個僞編譯器代替原來那個能夠正常構建你的項目的編譯器。默認狀況下,這個僞編譯器使用gcc來編譯你的代碼,而後執行靜態分析器進行代碼分析。
scan-build的基本使用方式很簡單,只需在你的命令行開頭輸入scan-build便可。詳細參數以下:
[root@localhost cgdb]# scan-build usage: scan-build [-h] [--verbose] [--override-compiler] [--use-cc <path>] [--use-c++ <path>] [--intercept-first] [--status-bugs] [--exclude <directory>] [--output <path>] [--keep-empty] [--html-title <title>] [--plist | --plist-html] [--use-analyzer <path>] [--no-failure-reports] [--analyze-headers] [--stats] [--internal-stats] [--maxloop <loop count>] [--store <model>] [--constraints <model>] [--analyzer-config <options>] [--force-analyze-debug-code] [--load-plugin <plugin library>] [--enable-checker <checker name>] [--disable-checker <checker name>] [--help-checkers] [--help-checkers-verbose] ... scan-build: error: missing build command
對於那些需用經過configure
命令生成Makefile
的工程來講,須要先執行如下命令:
scan-build ./configure
這個配置腳本須要在scan-build
中運行是由於scan-build
能經過介入到編譯器來掃描你的源文件。scan-build
將編譯器gcc設置爲analyze-cc
。analyze-cc
做爲一個僞編譯器,轉發命令行參數給gcc
和clang
來執行靜態分析。
而後執行如下命令,便可開始進行靜態分析。
scan-build make
仍是用cgdb
來進行測試,由於須要經過configure
生成Makefile
,因此執行如下命令:
sh autogen.sh scan-build -o cgdb-scan ./configure --prefix=$PWD/build scan-build -o cgdb-scan make
執行完畢,提示到cgdb-scan
目錄下查看結果。我將結果拷貝到Windows中進行查看。
result
打開index.html,會有驚喜等着你。由於scan-build
是在隨着編譯過程進行分析,因此其分析結果很是漂亮,和Xcode
中的 Analyzer
幾乎如出一轍。
先看看概要
Bug Summary
詳細內容能夠點擊查看
Paste_Image.png
隨便挑一個Memory leak看看
Paste_Image.png
Paste_Image.png
Paste_Image.png
詳細的出錯步驟,是否是很清楚?平常開發中,能夠結合兩種工具進行分析。
做者:咕咕鷄 連接:https://www.jianshu.com/p/f99d9a5d25ac 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。