2013-02-20 3 views
0

Я использую gcov для сбора данных покрытия кода для проекта C, над которым я работаю. Я понимаю, что gcov сбрасывает данные покрытия кода после выхода программы после завершения. Как собирать данные gcov для длительных процессов. (скажем, моя программа является ядром операционной системы, которая работает на сервере, который никогда не выключается - и мне нужно собирать данные о покрытии кода для него). Есть ли способ периодически получать данные о покрытии кода дампа gcov (скажем, каждые 1 час) или на определенном событии - как я могу вызвать данные покрытия кода дампа gcov (а не ждать, пока gcov сделает это после завершения программы)?Сброс данных 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); 
} 

Compile регулярно: gcc sig.c -ftest-coverage -fprofile-arcs
Затем тумблер (периодический) обновление по kill -2 process_id

Смежные вопросы