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

jos*_*pos 5 c segmentation-fault gcov

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

有人知道即使发生分段故障我怎么能使用gcov?

谢谢.

Emp*_*ian 6

有人知道即使发生分段故障我怎么能使用gcov?

覆盖文件通常由atexit处理程序编写,这需要程序调用exit().当程序死掉时SIGSEGV,这不会发生,这就是为什么.gcda在这种情况下你没有得到文件的原因.

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

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

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