【发布时间】:2023-09-02 23:54:01
【问题描述】:
最近我一直在尝试使用 gcc/gcov 对 C++ 项目进行代码覆盖测试。该项目由它的主要模块和几个.so库组成,这些都应该被纳入衡量。
我已经用 gcc 编译了所有带有 --coverage 参数的模块,并将它们保存在它们生成的地方,以及相应的 .gcno 标记文件。在正常执行和正常退出后,可以正确生成 .gcda 文件。 问题是,程序应该是一个没有中断或终止的服务,并且不允许在主模块中插入任何自定义代码(如信号处理程序)。正如来自网络的解决方案所建议的那样,我在独立的 .so 库中编写了一个信号处理函数,它在接收到 SIGUSR1 信号时调用 __gcov_flush 以将运行时覆盖计数器刷新到文件.
然而,据观察,虽然 __gcov_flush 函数保证被正确调用,但在运行时仅生成 .so 库的 .gcda 文件。在我看来, __gcov_flush 负责刷新包装模块的数据,而不是其他模块。我想知道这是否应该是这样工作的,还是我需要注意一些技巧才能产生完整的结果?
【问题讨论】:
标签: c++ c gcc code-coverage gcov