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