1. 程式人生 > 實用技巧 >BullseyeCoverage——C/C++程式碼覆蓋率分析工具

BullseyeCoverage——C/C++程式碼覆蓋率分析工具

安裝

官網下載地址: 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

參考文件