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");
}
}
gcovr -r .
------------------------------------------------------------------------------
GCC Code Coverage Report Directory: .
------------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
FindStackDirection.c 14 12 85% 65,73
------------------------------------------------------------------------------
TOTAL 14 12 85%
------------------------------------------------------------------------------
gcovr -r . --branches
------------------------------------------------------------------------------
File Branches Taken Cover Missing
------------------------------------------------------------------------------
FindStackDirection.c 6 4 66% 63,67
------------------------------------------------------------------------------
TOTAL 6 4 66%
------------------------------------------------------------------------------
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>
# 單一 HTML 報告
gcovr -r . --html -o FindStackDirection.html
# 含每檔案詳細頁面
gcovr -r . --html --html-details -o FindStackDirection2.html



HTML 詳細模式下,點擊檔案名稱可進入逐行覆蓋率標示頁,綠色=已覆蓋,紅色=未覆蓋,黃色=部分分支覆蓋。
gcovr 以極小體積提供專業級覆蓋率分析能力,支援多種輸出格式無縫整合 CI/CD 流程,是 C/C++ 專案品質保證的利器。