在运行时转储 gcov 数据

Raj*_*Raj 3 c code-coverage gcov

我正在使用 gcov 收集我正在从事的 C 项目的代码覆盖率数据。据我所知,一旦程序完成后退出,gcov 就会转储代码覆盖率数据。如何收集长时间运行的进程的 gcov 数据。(比如说,我的程序是一个操作系统的内核,该操作系统在永不关闭的服务器中运行 - 我需要为其收集代码覆盖率数据)。有没有办法让 gcov 定期(例如每 1 小时)或在某些事件时转储代码覆盖率数据 - 如何触发 gcov 转储代码覆盖率数据(而不是等待 gcov 在程序终止后执行此操作)?

Aki*_*nen 5

__gcov_flush()定期打电话。

这可以通过关联信号处理程序来完成:

#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);
}
Run Code Online (Sandbox Code Playgroud)

定期编译:gcc sig.c -ftest-coverage -fprofile-arcs
然后切换(定期)更新kill -2 process_id