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