用gcov编译的简单c类在执行期间不返回

时间:2014-08-07 13:27:13

标签: code-coverage gcov

我正在尝试使用gcov,所以我开始玩一些小的c类来测试它。 以下类是example.c我使用

#include <stdio.h>

int main(){
printf("Hello \n"); // I also tried without this printf
return 0;
}

以这种方式编译后的某些原因:

g++ -ftest-coverage -fprofile-arcs example.c -o test

当我尝试执行它时,执行永远不会返回: - (

prompt> ./test
...   
...
... 

这个简单的exe永远不会从执行中返回,当我强制ctrl + c终止它时,* gcda文件当然是空的。

任何想法? 非常感谢你。

1 个答案:

答案 0 :(得分:0)

似乎在等待写锁定。

当我strace ./test 2>&1 | grep fcntl我得到

fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)

根据http://linux.die.net/man/2/fcntl,它与锁定有关 (这里不是专家)

分析显示它等待test.gcda上的锁定。 你有别的东西吗?

为什么我认为(遵循文件描述符3):

<snip>
open("/home/<user>/test.gcda", O_RDWR|O_CREAT, 0666) = 3
fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
<snip>
close(3)                                = 0
<snip>

显然它可以在我的机器上获得它。