jos*_*pos 5 c segmentation-fault gcov
我正在使用标志"-Wall -W -pedantic -O0 --coverage"(GCC版本4.8.2)编译C程序.但是,当该程序发生分段错误时,我无法提取覆盖范围,因为我没有.gcda文件...
有人知道即使发生分段故障我怎么能使用gcov?
谢谢.
有人知道即使发生分段故障我怎么能使用gcov?
覆盖文件通常由atexit处理程序编写,这需要程序调用exit().当程序死掉时SIGSEGV,这不会发生,这就是为什么.gcda在这种情况下你没有得到文件的原因.
最好的解决方案是首先解决导致的任何错误SIGSEGV.
或者,您可以安装SIGSEGV处理程序,并exit()从中进行调用.这不保证有效.例如,如果您的程序SIGSEGV因堆损坏而命中,则在调用全局析构函数时可能会死锁或再次崩溃exit.
另一种可能的解决方案是在GDB下运行程序,并__gcov_flush()在获得时从调试器调用SIGSEGV.