将gcov与可执行文件使用的共享对象一起使用

时间:2013-08-28 08:41:11

标签: gcov

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

1 个答案:

答案 0 :(得分:0)

可以获得共享库的覆盖范围。 我尝试使用具有共享库概念的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程序     //你好ç     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 profiling编译它。