7

私は KLEE と呼ばれるテスト生成ツールを使用しています。これは、私の C99 コード用に多くのテストを作成します。その後、テストを実行し、gcov でライン カバレッジをチェックします。Gcov は、実行が正常に完了すると、実行の最後にカバレッジ データを更新するようです。

ただし、一部のテストは失敗し (true でない assert ステートメント)、プログラムが中止され、gcov はこの実行でカバーされた行をカウントしません。

gcov が (成功した場合だけでなく) 終了時に情報をフラッシュする方法はありますか?

4

1 に答える 1

7

アサート コードで (コンパイラのオプションvoid __gcov_flush(void)によってリンクされている libgcov.a から) を呼び出します。これは gcov_exit 関数を呼び出します (libgcov で静的に定義されています)。gcov_exit は、収集したカバレッジをファイルに保存するための主な関数です。__gcov_init によって;で登録されます。アプリケーションを強制終了すると、アサートは atfork を無視します。-fprofile-arcsabort();__gcov_flush();abort();atfork()

atfork()これを解決する別の方法は、アサートが-registered 関数を無視する理由を見つけることです。

于 2011-08-15T12:31:18.783 に答える