3

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

4

1 回答 1

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);
}

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

于 2013-02-20T10:33:39.430 回答