簡體   English   中英

gcov為c生成空的覆蓋范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM