让我从示例开始——从 python 调用库代码。
这是库代码(编译成 library libfoolib
):
#include <stdio.h>
void bar()
{
printf("bar\n");
}
void foo()
{
printf("foo\n");
}
这是调用它的python代码:
#!/usr/bin/python25
import sys
import libfoolib
import processing
def callFoo():
libfoolib.foo()
libfoolib.bar()
process = processing.Process(target=callFoo)
process.start()
当库被编译-ftest-coverage
并且-fprofile-arcs
编译器正确生成gcno
文件并且当 python 代码被执行时,gcda
文件也被生成。问题是它只包含bar
在 python 分叉之前被调用的函数的覆盖率。如果在foo
python 的处理调用之外也调用了,那么一切都很好。
这是我gcov
在生成的覆盖率数据上运行工具时得到的:
-: 0:Source:/codeCoverageTests/pythonSIP/foo.c
-: 0:Graph:debug/CMakeFiles/fooLib.dir/foo.c.gcno
-: 0:Data:debug/CMakeFiles/fooLib.dir/foo.c.gcda
-: 0:Runs:4
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:void bar()
function bar called 4 returned 100% blocks executed 100%
4: 4:{
4: 5: printf("bar\n");
call 0 returned 100%
4: 6:}
-: 7:
-: 8:void foo()
function foo called 0 returned 0% blocks executed 0%
#####: 9:{
#####: 10: printf("foo\n");
call 0 never executed
#####: 11:}
-: 12:
我的问题是“我的foo
覆盖数据在哪里?”
有关环境的更多详细信息:
- CentOS 5.4
- gcc:4.1.2 20080704(红帽 4.1.2-46)
- CMake 构建(版本 2.8.0)
- 蟒蛇2.5
- python to C 使用 SIP(版本 4.7.4)