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