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