我正在尝试使用clang -coverage
为我的C项目生成覆盖率信息,但所有函数签名都被标记为未覆盖,当我预计它们未被检测到时所有。clang -coverage将函数签名标记为未覆盖
小例子 - 这个文件是hello.c
:
extern int puts(const char*);
int main(int argc, char *argv[]) {
puts("hello, world");
return 0;
}
在这个例子中,我期望线4和5被标记可执行文件,但不就行了。我跑clang -coverage
和lcov
像这样得到初步报道:
$ cc -coverage hello.c
$ lcov -c -i -d . -o coverage.base
Capturing coverage data from .
Found gcov version: 3.6.0
Found LLVM gcov version 3.4, which emulates gcov version 4.2
Scanning . for .gcno files ...
Found 1 graph files in .
Processing hello.gcno
Finished .info-file creation
生成覆盖率文件看起来是这样的:
TN:
SF:/Users/isbadawi/cov/hello.c
FN:3,main
FNDA:0,main
FNF:1
FNH:0
DA:3,0
DA:4,0
DA:5,0
LF:3
LH:0
end_of_record
我希望DA:3,0
线不在那里 - 或者至少,如果它在那里,我希望它在最终报道报道中被标记。当我去跑a.out
并再次运行LCOV生成一个全覆盖的报告,像这样:
$ ./a.out
$ lcov -q -c -d . -o coverage.run
$ lcov -q -d . -a coverage.base -a coverage.run -o coverage.total
coverage.total
看起来是这样的:
TN:
SF:/Users/isbadawi/cov/hello.c
FN:3,main
FNDA:1,main
FNF:1
FNH:1
DA:3,0
DA:4,1
DA:5,1
LF:3
LH:2
end_of_record
我最终以66.7%的覆盖率,而不是100 %。我究竟做错了什么?
我使用的是OS X约塞米蒂系统铛:
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix
试图用gcc(4.8.2与尝试),同样的事情,该行仍标记可执行文件,但最终覆盖报告有它正在执行。