3

作業中の C プロジェクトのコード カバレッジ データを収集するために gcov を使用しています。完了後にプログラムが終了すると、gcov がコード カバレッジ データをダンプすることを理解しています。長時間実行されているプロセスの gcov データを収集するにはどうすればよいですか。(たとえば、私のプログラムは、決してシャットダウンしないサーバーで実行されるオペレーティング システムのカーネルであり、コード カバレッジ データを収集する必要があります)。gcov ダンプ コード カバレッジ データを定期的 (たとえば、1 時間ごと) または特定のイベント時に作成する方法はありますか? (プログラムの終了後に gcov がそれを行うのを待つのではなく) gcov ダンプ コード カバレッジ データをトリガーするにはどうすればよいですか?

4

1 に答える 1

5

__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

于 2013-02-20T10:33:39.430 に答える