Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能使用;gcov“;即使出现分段错误?_C_Segmentation Fault_Gcov - Fatal编程技术网

我怎样才能使用;gcov“;即使出现分段错误?

我怎样才能使用;gcov“;即使出现分段错误?,c,segmentation-fault,gcov,C,Segmentation Fault,Gcov,我正在编译一个带有标志“-Wall-W-pedantic-O0-coverage”(GCC版本4.8.2)的C程序。但是,当该程序出现分段错误时,我无法提取覆盖率,因为我没有.gcda文件 有人知道即使出现分段错误,我如何使用gcov 谢谢 有人知道即使发生分段错误,我如何使用gcov吗 覆盖率文件通常由atexit处理程序编写,它要求程序调用exit()。当程序与SIGSEGV一起死机时,不会发生这种情况,这就是为什么在这种情况下不能获得.gcda文件的原因 最好的解决方案是首先修复导致SIG

我正在编译一个带有标志“-Wall-W-pedantic-O0-coverage”(GCC版本4.8.2)的C程序。但是,当该程序出现分段错误时,我无法提取覆盖率,因为我没有.gcda文件

有人知道即使出现分段错误,我如何使用gcov

谢谢

有人知道即使发生分段错误,我如何使用gcov吗

覆盖率文件通常由
atexit
处理程序编写,它要求程序调用
exit()
。当程序与
SIGSEGV
一起死机时,不会发生这种情况,这就是为什么在这种情况下不能获得
.gcda
文件的原因

最好的解决方案是首先修复导致SIGSEGV
SIGSEGV
的任何错误

或者,您可以安装一个
SIGSEGV
处理程序,并从中调用
exit()
。这并不能保证有效。例如,如果您的程序由于堆损坏而命中了
SIGSEGV
,则当
exit
调用全局析构函数时,它可能会再次死锁或崩溃


另一种可能的解决方案是在GDB下运行该程序,当您获得
SIGSEGV

时,从调试器调用
\uuuugcov\u flush()
,您需要
-g
作为调试符号,您应该使用GDB,而不是gcov。您好@MatteoItalia,谢谢您的回复,但我不想调试该程序,我想要程序执行的覆盖范围(即使发生分段错误)。我的问题和这个老问题很相似。呃,对不起,我当时完全误解了这个问题。+1极好-
\uugcov\u flush()
正是我需要知道的!非常感谢。在我的上下文中,我没有
\u gcov\u flush()
符号,但这个想法奏效了。我只是调用了
gcov_exit()
(使用
print
命令),我的可执行文件编写了它的
.gcda
文件。