發布 cppcheck 2.6,C++ 和 C 語言的靜態程式碼分析器

靜態程式碼分析器 cppcheck 2.6 的新版本已發布,它允許您識別 C 和 C++ 語言程式碼中的各種類型的錯誤,包括使用非標準語法時的錯誤(嵌入式系統的典型錯誤)。 提供了一系列插件,透過它們可以將cppcheck與各種開發、持續集成和測試系統集成,並提供檢查程式碼是否符合程式碼風格等功能。 要解析程式碼,您可以使用自己的解析器或 Clang 的外部解析器。 它還包括 donate-cpu.py 腳本,以提供本地資源來對 Debian 軟體包進行協作程式碼審查工作。 該專案的原始程式碼根據 GPLv3 許可證分發。

cppcheck 的開發重點是識別與未定義行為相關的問題以及從安全角度來看危險的設計的使用。 目標還在於最大限度地減少誤報。 已識別的問題包括:指向不存在物件的指標、除以零、整數溢位、不正確的位移操作、不正確的轉換、使用記憶體時出現的問題、STL 不正確的使用、空指標取消引用、實際訪問後使用檢查到緩衝區、緩衝區溢位、使用未初始化的變數。

在新版本中:

  • 分析器核心中加入了以下檢查:
    • 函數體中缺少返回運算子;
    • 記錄重疊數據,定義未定義的行為;
    • 正在比較的值超出了類型的值表示形式;
    • 複製優化不適用於 return std::move(local);
    • 不能同時開啟檔案在不同的串流(stream)中進行讀寫;
  • 對於 Unix 平台,增加了以不同顏色顯示診斷訊息的支援;
  • 新增了 ValueFlow 的符號分析。 在計算兩個未知變數之間的差異時使用簡單的delta;
  • 用於標記清單「define」的規則也可以符合#include;
  • 庫標籤現在可以包含一個標籤,以及相應的自由函數,它可以接受諸如 std::size、std::empty、std::begin、std::end 等容器。 可指定連接器的產量或動作;
  • 庫標籤現在可以包含一個標籤對於具有唯一所有權的智慧指標。 現在發出有關對這些類型的智慧指標的懸空引用的警告;
  • 修正了處理 —cppcheck-build-dir 參數的問題;
  • htmlreport 現在可以顯示作者的資訊(使用 gitblame);
  • 關於不是常數但可能是常數的變數的擴展警告;
  • 分析儀累積的錯誤和缺點已修正。

此外,Misra C 2012 的檢查,包括修正案 1 和修正案 2,已全面實施,但規則 1.1、1.2 和 17.3 除外。 檢查 1.1 和 1.2 必須由編譯器執行。 驗證17.3可以由GCC等編譯器執行。

來源: opennet.ru

添加評論