[英]gcov generates empty coverage for c
我正在嘗試為在Ubuntu上具有c ++和c代碼的項目收集代碼覆蓋率。
我使用'-fprofile-arcs'和'-ftest-coverage'值作為CXXFLAGS和CFLAGS; '-lgcov'作為LINKFLAGS。
常見的C項目結構是:
c_code\
src
unit_tests
src包含靜態庫的源代碼。
unit_tests dir包含用googletest框架編寫的測試,例如種類測試
TEST_F(test_case_name, test_name) {
some_gtest_assertions;
}
在構建googletest二進制文件之后,應該包含要在其內部進行測試的靜態庫。
構建和運行項目二進制文件會導致生成* .gcno和* .gcda文件。 但是我的C覆蓋率結果為空(C ++生成良好)。
lcov命令具有以下格式:
lcov --capture --directory my_c_gcda_location --output-file c_coverage.info
對於與C相關的gcda文件,lcov的日志顯示以下內容:
gcov沒有為“my_c_gcda_location / * .gcda”創建任何文件
也有類似的錯誤:
* .gcda:與備注文件不匹配
我應該指定一些額外的參數還是執行一些額外的操作來獲得C的覆蓋率結果? 或者這些問題的原因是什么?
當.gcda文件比.gcno文件更新時,您可能會收到“戳記不匹配”。
它主要有兩個原因:1。您可能在運行測試之后和跟蹤文件生成之前重新構建代碼。 2.二進制文件可以在一台機器上構建,測試在其他機器上運行,其時間早於構建機器。
對於這兩種情況,您必須確保.gcda的文件創建時間大於.gcno和.c *文件。
您只需執行“touch * .gcda”,然后運行lcov命令即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.