我正在尝试使用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文件当然是空的。
任何想法? 非常感谢你。
答案 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>
显然它可以在我的机器上获得它。