Сброс данных gcov во время выполнения

Я использую gcov для сбора данных о покрытии кода для проекта C, над которым я работаю. Я понимаю, что gcov сбрасывает данные о покрытии кода после завершения программы. Как собирать данные gcov для длительных процессов. (скажем, моя программа — это ядро ​​операционной системы, которая работает на сервере, который никогда не выключается, и мне нужно собрать для нее данные о покрытии кода). Есть ли способ периодически создавать данные о покрытии кода дампа gcov (скажем, каждый час) или при определенном событии - как я могу инициировать данные о покрытии кода дампа gcov (вместо того, чтобы ждать, пока gcov сделает это после завершения программы)?


person Raj    schedule 20.02.2013    source источник


Ответы (1)


Периодически звоните __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

person Aki Suihkonen    schedule 20.02.2013