在运行时转储gcov数据

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

定期调用__gcov_flush()

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

 #include  #include  #include  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切换(定期)更新