0

我正在尝试为我的项目生成覆盖率报告。.gcno 文件是按预期为共享对象代码文件生成的,但是当我运行可执行文件(它使用生成的共享对象)时,.so 也存在于与可执行文件相同的位置,但共享对象的 .gcda 文件不会生成而可执行代码的 .gcda 文件按预期生成。方法有问题吗?请指教

4

1 回答 1

1

它可以覆盖共享库。我尝试使用具有共享库概念的 gcov 进行简单的 hello 应用程序分析,我能够获得代码覆盖率。让我们拿两个文件 hello.c 和 extlib.c

首先编译extlib.c

#include <stdio.h>

extern void print(const char* p, ...);

void print(const char* p, ...) {
    printf("%s World!\n", p);

}

gcc -shared -fPIC extlib.c -o libext.so -ftest-coverage -fprofile-arcs

这里会得到 extlib.gcno libextlib.so

接下来将它链接到主 hello 程序 //hello.c extern void print(const char*, ...);

int main() {
    print("Hello");
}

gcc hello.c -L./ -lextlib -o test -ftest-coverage -fprofile-arcs

在这个 hello.gcno 文件之后。执行./test

执行后会得到 extlib.gcda 和 hello.gcda

使用gcov *.c可以检查覆盖率。

所以我的建议是在你的项目中尝试一些简单的文件,使用 gcov 分析单独编译它。

于 2013-08-28T12:07:27.920 回答