BullseyeCoverage——C/C++程式碼覆蓋率分析工具
阿新 • • 發佈:2020-12-20
安裝
官網下載地址: https://www.bullseye.com/cgi-bin/download
安裝過程中需要License, 可以申請評估版本的key或者直接從官網渠道購買。
Ubuntu18.04為例:
/install --prefix /opt --key {LICENSE_KEY}
常用命令
BullseyeCoverage
狀態切換:
cov01 -1 # Enable BullseyeCoverage
cov01 -0 # Disable BullseyeCoverage
cov01 -s # Display BullseyeCoverage Status
- 轉換掃描結果為可讀格式:
covhtml -f xxx.cov /home/xxx # convert to html
covxml -f xxx.cov /home/xxx # convert to xml
- 合併多個掃描結果:
covmerge -c -f output.cov input1.cov input2.cov # merge multi *.cov
使用步驟
假設BullseyeCoverage
安裝於/opt/BullseyeCoverage/bin
# cd CODE_BUILD_PATH export PATH=/opt/BullseyeCoverage/bin:$PATH export COVFILE=`pwd`/xxx.cov export COVERAGE_REPORT=`pwd`/xxx_cov_report.xml cov01 -1 make && test covhtml -f xxx.cov /home/xxx
分析
https://www.bullseye.com/help/report-annotation.html
結果中的各種符號解析:
->
: 表示一個不完整的覆蓋, 一般和T/F組合使用√
/X
: 表示下列情況之一已觸達/未觸達:- 函式 / lambda表示式被執行到
switch
標籤被執行到try-catch
語句塊被執行到for
迴圈語句塊被執行到
T
/F
: 表示當前判斷bool的分支只跑了其中一個情況,TF
表示均有覆蓋到t
/f
: 表示當前if
的判斷表示式裡面的各個小分量的分支覆蓋情況k
: 表示絕對的判斷條件, 因為百分百會跑向某個分支,所以這個僅僅是為了標記而已/
: 表示事件被排除在彙總結果之外
*排除不想掃描的程式碼
- 排除檔案掃描:
covselect -a '!**/*_test*.cpp'
(排除當前目錄下任意一級目錄下的所有*_test*.cpp
) - 排除程式碼塊:
#pragma BullseyeCoverage off
/#pragma BullseyeCoverage on