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