即使出现分段故障,我如何使用“gcov”?

时间:2013-11-27 18:36:20

标签: c segmentation-fault gcov

我正在使用标志“-Wall -W -pedantic -O0 --coverage”(GCC版本4.8.2)编译C程序。但是,当该程序发生分段错误时,我无法提取覆盖范围,因为我没有.gcda文件......

有人知道即使发生分段错误,我怎样才能使用 gcov

感谢。

1 个答案:

答案 0 :(得分:6)

  

有人知道即使出现分段错误,我怎样才能使用gcov?

覆盖文件通常由atexit处理程序编写,这需要程序调用{​​{1}}。当程序以exit()终止时,这不会发生,这就是为什么在这种情况下你没有获得SIGSEGV文件的原因。

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

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

另一种可能的解决方案是在GDB下运行程序,并在获得exit时从调试器调用__gcov_flush()