【问题标题】:Dumping gcov data at runtime在运行时转储 gcov 数据
【发布时间】:2013-02-05 07:16:01
【问题描述】:

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

【问题讨论】:

    标签: c code-coverage gcov


    【解决方案1】:

    定期致电__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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2019-09-09
      • 2012-11-24
      • 2015-06-29
      • 2018-11-28
      • 2012-08-16
      相关资源
      最近更新 更多