gcov 使用注意事項

以前做過一些gcov方面的工作,最近又做,發現一些踩過的坑被忘記了,又整理了一遍,防止再次出現類似情況。

使用gcov測試代碼覆蓋率的流程是:
添加編譯選項和鏈接選項-----》運行程序(設置GCOV_PREFIX,設置GCOV_PREFIX_STRIP環境變量)-----》讓程序正常結束(kill不會生成相關.gcda文件)-----》運行gcov命令手動分析或用lcov來分析,lcov可能需要手動安裝,安裝地址https://github.com/linux-test-project/lcov.git

1,在編譯選項中添加-ftest-coverage -fprofile-arcs,
-fkeep-static-functions -fkeep-inline-functions選項可另行選用
在鏈接選項中添加 -lgcov,特別要注意,編譯生成的.so中,也要鏈接-lgcov,
即在生成的可執行程序和.so中,都需要鏈接-lgcov

2,運行程序,先設置GCOV_PREFIX和GCOV_PREFIX_STRIP環境變量,也可以不設置,不設置時,生成的.gcda文件在make時的目錄及其子目錄下,即與相關的源代碼路徑相同,只是文件名不同。
這兩個變量,可以控制生成的.gcda的位置
GCOV_PREFIX_STRIP去掉原代碼路徑中的前幾級,
比如源代碼路徑爲/a/b/c/d.cpp,如果GCOV_PREFIX_STRIP=2
則實際使用的路徑是c/d.cpp
如果GCOV_PREFIX=/run/gcov,則.gcda實際存放的路徑是/run/gcov/c/d.gcda

程序運行後,可以進行正常的業務測試

3,讓程序正常結束,比如處理特定信號並exit(0),或其他方式,把程序kill掉不會生成相關的.gcda

4,gcov命令分析見 gcov -h,下面附一個lcov的小腳本:

#!/bin/sh

#如果lcov沒有裝,要先裝lcov
#可以從 https://github.com/linux-test-project/lcov.git 上裝
#使用前注意事項
#1,啓用gcov相關編譯選項,見make gcov=1
#2,需要在程序運行並正常退出後,運行此腳本,生成相關覆蓋率文件

echo "check lcov cmd"
lcov=$(command -v lcov | wc -l)
if [[ ${lcov} == 0 ]]; then
    echo 請先安裝 lcov, 安裝來源可以參考 https://github.com/linux-test-project/lcov.git
    exit 0
fi

echo "creating ../gcov"
if [[! -d ../gcov ]]; then
    mkdir ../gcov
fi

echo "creating ../gcov/gcov.info"
lcov -c -o ../gcov/gcov.info -d ../src

echo "creating htmls "
if [[! -d ../gcov/html ]]; then
    mkdir ../gcov/html
fi

genhtml -o ../gcov/html ../gcov/gcov.info
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章