2013-02-20 39 views
0

我正在使用gcov來收集我正在處理的C項目的代碼覆蓋率數據。我瞭解,gcov會在完成後退出程序後轉儲代碼覆蓋率數據。如何爲長時間運行的流程收集gcov數據。 (比如說,我的程序是運行在一個永遠不會關閉的服務器上的操作系統的內核 - 我需要爲它收集代碼覆蓋率數據)。有沒有辦法定期(比如說,每1小時)或某些事件發生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); 
} 

定期編譯:

這可以通過signal handler關聯進行gcc sig.c -ftest-coverage -fprofile-arcs
然後切換(週期性)更新通過kill -2 process_id