首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

gcovr 工具詳解:C 程式碼覆蓋率報告產生與視覺化

     編輯:關於C語言

gcovr 簡介

gcovr 是 Python 開發的開源工具(最新版 3.2),將 GCC/GCOV 產生的覆蓋率資料轉為人類可讀的報表:文字列表、XML (Cobertura 格式)、HTML 網頁。體積僅數十 KB,功能強大。

下載:PyPI 官方頁面

安裝與測試環境準備

# 解壓後將 scripts/gcovr 複製到 /usr/bin
# 編譯測試程式 (需加入覆蓋率編譯旗標)
gcc -fprofile-arcs -ftest-coverage -fPIC -O0 FindStackDirection.c -o FindStackDirection
./FindStackDirection  # 執行產生 .gcda 檔案

編譯旗標說明:-fprofile-arcs -ftest-coverage 啟用基本區塊/分支計數,-fPIC -O0 確保偵錯資訊完整。

測試程式:尋找堆疊增長方向

void FindStackDirection(void) {
    UINT8 iStackAddr = 0;
    static UINT8 *pStackAddr = NULL;
    if (pStackAddr == NULL) {
        pStackAddr = &iStackAddr;
        FindStackDirection();  // 遞歸第二次進入
    } else {
        if (&iStackAddr > pStackAddr) printf("Stack grows up!\n");
        else if (&iStackAddr < pStackAddr) printf("Stack grows down!\n");
        else printf("Bad stack!\n");
    }
}

常用指令與輸出範例

1. 文字列表報告

gcovr -r .
------------------------------------------------------------------------------
GCC Code Coverage Report Directory: .
------------------------------------------------------------------------------
File                       Lines  Exec  Cover  Missing
------------------------------------------------------------------------------
FindStackDirection.c       14     12    85%    65,73
------------------------------------------------------------------------------
TOTAL                      14     12    85%
------------------------------------------------------------------------------

2. 分支覆蓋率報告

gcovr -r . --branches
------------------------------------------------------------------------------
File                       Branches  Taken  Cover  Missing
------------------------------------------------------------------------------
FindStackDirection.c       6         4      66%    63,67
------------------------------------------------------------------------------
TOTAL                      6         4      66%
------------------------------------------------------------------------------

3. XML 格式報告 (適合 CI 整合)

gcovr -r . --xml-pretty
<?xml version="1.0"?>
<coverage branch-rate="0.667" line-rate="0.857" version="gcovr 3.2">
  <sources><source>.</source></sources>
  <packages>
    <package name="" line-rate="0.857" branch-rate="0.667">
      <classes>
        <class name="FindStackDirection_c" filename="FindStackDirection.c">
          <lines>
            <line number="34" hits="1" branch="false"/>
            <line number="63" hits="1" branch="true" condition-coverage="50% (1/2)">
              <conditions><condition number="0" type="jump" coverage="50%"/></conditions>
            </line>
            ...
          </lines>
        </class>
      </classes>
    </package>
  </packages>
</coverage>

4. HTML 視覺化報告

# 單一 HTML 報告
gcovr -r . --html -o FindStackDirection.html

# 含每檔案詳細頁面
gcovr -r . --html --html-details -o FindStackDirection2.html

HTML 總覽報告

HTML 詳細報告索引

單一檔案詳細覆蓋率

HTML 詳細模式下,點擊檔案名稱可進入逐行覆蓋率標示頁,綠色=已覆蓋,紅色=未覆蓋,黃色=部分分支覆蓋。

總結

gcovr 以極小體積提供專業級覆蓋率分析能力,支援多種輸出格式無縫整合 CI/CD 流程,是 C/C++ 專案品質保證的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved