gpt4 book ai didi

c - 即使发生段错误,我如何使用 "gcov"?

转载 作者:太空狗 更新时间:2023-10-29 15:00:41 25 4
gpt4 key购买 nike

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

有谁知道即使在发生段错误时我如何使用gcov

谢谢。

最佳答案

Does anyone know how can I use gcov even when a segmentation fault happens?

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

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

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

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

关于c - 即使发生段错误,我如何使用 "gcov"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20250400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com