在运行时转储gcov数据

时间:2013-02-20 10:14:42

标签: c code-coverage gcov

我正在使用gcov收集我正在处理的C项目的代码覆盖率数据。我知道一旦程序在完成后退出,gcov会转储代码覆盖率数据。如何为长时间运行的进程收集gcov数据。 (比方说,我的程序是在永不关闭的服务器中运行的操作系统的内核 - 我需要为它收集代码覆盖率数据)。是否有任何方法可以定期(例如,每1小时)或特定事件生成gcov转储代码覆盖率数据 - 如何触发gcov转储代码覆盖率数据(而不是在程序终止后等待gcov执行此操作)?

1 个答案:

答案 0 :(得分:2)

定期致电__gcov_flush()

这可以通过关联signal handler

来完成
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void __gcov_flush();

static void catch_function(int signal) {
   __gcov_flush();
}

int main(void) {
    if (signal(SIGINT, catch_function) == SIG_ERR) {
        fputs("An error occurred while setting a signal handler.\n", stderr);
        return EXIT_FAILURE;
    }
    while(1);
}

定期编译:{{1​​}}
然后按gcc sig.c -ftest-coverage -fprofile-arcs

切换(定期)更新