天天看點

靜态分析工具Cppcheck在Windows上的使用

      之前在https://blog.csdn.net/fengbingchun/article/details/8887843 介紹過Cppcheck,那時還是1.x版本,現在已到2.x版本,這裡再總結下。

      Cppcheck是一個用于C/C++代碼的靜态分析工具,源碼位址為https://github.com/danmar/cppcheck ,最新釋出版本為2.10,License為GPL-3.0.它支援在Windows、Linux、Mac上安裝。

      Cppcheck提供了獨特的代碼分析來檢測bugs,并專注于檢測未定義的行為和危險的編碼結構。它的目标是僅檢測代碼中的真正錯誤,并生成盡可能少的誤報。Cppcheck關注bug而不是代碼風格。

      靜态分析是一個非常大的領域,Cppcheck隻涵蓋了其中的一部分。沒有一種工具能覆寫整個領域。每個工具都有獨特的代碼分析,使用一組工具比使用一種工具要好,是很好的補充。

      未定義的行為(undefined behaviour)包括:

      (1).dead pointers;

      (2).除以0;

      (3).整數溢出;

      (4).無效的位移操作;

      (5).無效的轉換;

      (6).STL的用法無效;

      (7).記憶體管理;

      (8).空指針解引用;

      (9).越界檢查;

      (10).未初始化的變量;

      (11).寫const資料;

      安裝:從https://github.com/danmar/cppcheck/releases/tag/2.10 下載下傳cppcheck-2.10-x64-Setup.msi,輕按兩下進行安裝,并将安裝路徑即cppcheck.exe所在路徑加入到系統環境變量中。

      結果消息(messages)包括:

      (1).error: 執行代碼時未定義的行為或其它錯誤,如記憶體洩漏;

      (2).warning: 執行代碼時可能存在未定義的行為;

      (3).style: 風格問題,例如未使用的函數、備援代碼、constness、運算符優先級、可能的錯誤;

      (4).performance: 基于常識(common knowledge)的運作時性能建議;

      (5).portability: 可移植性警告;

      (6).information: 配置問題,與文法正确性無關.

      注意事項:

      (1).通過執行cppcheck.exe --help 可檢視支援哪些輸入參數;

      (2).文法: cppcheck.exe [options] [files or paths]

      (3).--file-filter=<str>: 設定檔案過濾器,并且僅檢查與過濾器比對的檔案;如--file-filter=*bar.cpp 隻分析以bar.cpp結尾的檔案;

      (4).--cppcheck-build-dir=<dir>: Cppcheck将分析資訊儲存在該檔案夾中,推薦使用.優點:加快分析速度,使增量分析成為可能;使用多個線程時也可以進行全程式(whole program)分析;

      (5).--enable=<id>: id可為all, warning, style, performance, portability, information, missingInclude; all啟用所有檢查,當掃描整個程式時,建議隻使用all,因為這會啟用unusedFunction;可以指定多個id,用逗号分開;

      (6).--file-list=<file>: 在文本檔案中指定要check的檔案;

      (7).-I <dir>: 給出搜尋include檔案的路徑,可有多個-I;

      (8).--include=<file>: 在checked檔案之前強制include一個檔案;

      (9).--output-file=<file>: 将結果寫入檔案;

      (10).-v或--verbose: 輸出更詳細的錯誤資訊.

      這裡使用GitHub Messy_Test/demo/Messy_Test 中的代碼進行測試,執行指令如下所示:

靜态分析工具Cppcheck在Windows上的使用

      在目前的results目錄生成一些檔案,打開其中的result.txt,内容如下:對有問題的代碼行給出原因說明

靜态分析工具Cppcheck在Windows上的使用

      GitHub: https://github.com/fengbingchun/Messy_Test