13

同じソースファイル(CとObj-C)を2つのターゲットにコンパイルしています。単体テストの実行可能ファイルと実際の製品(統合テストが行​​われます)です。2つのターゲットは異なる場所に構築されるため、オブジェクトファイル、.gcnoファイルと.gcdaファイルは別々です。すべてのソースファイルが単体テストにコンパイルされるわけではないため、すべてのオブジェクトが単体テストに存在するわけではありません。すべてのソースファイルは製品ビルドにコンパイルされます。

2セットの.gcdaファイルを組み合わせて、単体テストと統合テストの合計カバレッジを取得する方法はありますか(製品ビルドで実行されるため)?

私はlcovを使用しています。

Mac OS X 10.6、GCC 4.0

ありがとう!

4

5 に答える 5

10

最後に、私はlcovを使って問題を解決することができました。

基本的に私がしたことは次のとおりです。

  • フラグを使用してアプリケーションをコンパイルします-fprofile-arcs -ftest-coverage --coverage
  • アプリケーションのコピーを各ノードに配布します。
  • 各ノードでアプリケーションを並行して実行します。(この手順では、アクセスホストのアプリケーションディレクトリにカバレッジ情報が生成されます)
  • lcovに彼の仕事をさせましょう:
    • lcov --directory src/ --capture --output-file coverage_reports/app.info
  • html出力を生成します。
    • genhtml -o coverage_reports/ coverage_reports/app.info

これが誰かの助けになることを願っています。

于 2013-09-10T08:22:24.060 に答える
8

lcovを使用しているので、gcov .gcdaファイルをlcovファイルに変換し、それらをlcovとマージできるはずです--add-tracefile

マンページから:tracefileの内容を追加します。-aスイッチを使用して複数のトレースファイルを指定し、テストとファイル名の組み合わせを照合するための実行カウントを合計して、これらのファイルに含まれるカバレッジデータを結合します。

于 2010-07-30T14:50:34.867 に答える
2

以下のUPDATEを参照してください。

.gcdaこれを行うための意図された方法は、ファイルを直接結合するのではなく、を使用して独立したカバレッジデータファイルを作成することだと思います

lcov -o unittests.coverage -c -d unittests
lcov -o integrationtests.coverage -c -d integrationtests

各カバレッジデータは、1つの「実行」を表します。もちろん、個別のグラフまたはhtmlビューを作成することもできます。ただし、略して--add-tracefile、を使用してデータを結合することもできます。-a

lcov -o total.coverage -a unittests.coverage -a integrationtests.coverage

から、たとえばtotal.coverageを使用して、合計レポートを生成できます。genhtml

更新:実際には、を.gcda使用してファイルを直接マージすることが可能であることがわかりましたがgcov-tool、残念ながらMacでは簡単に利用できないため、この更新では元の質問に答えることができません。

しかし、これを使用するとgcov-tool、多くのセットを1つに段階的にマージすることもできます。

gcov-tool merge dir1 dir -o dir
gcov-tool merge dir2 dir -o dir
gcov-tool merge dir3 dir -o dir

それは文書化されておらず、信頼するのは危険かもしれませんが。

これは本当に高速で、多くのセットをマージするときにはるかに遅いlcovを迂回する方法を回避します。私のマシンでは、70ファイルの約80セットをマージするのに0.5秒もかかりません。また、必要に応じて、集約されたセットに対しても実行できますlcov。これも非常に高速です。私はファイルを直接使用するEmacscov-modeを使用しています。.gcov

詳細については、この回答を参照してください。

于 2020-04-15T14:30:10.320 に答える
1

以下のようにlcovmulti-dパラメータでマージします。できます。

lcov -c -d ./tmp/ -d ./tmp1/ -o ./tmp/coverage.info
于 2017-04-20T06:30:34.053 に答える
0

より簡単な代替方法は、共有C / ObjCファイルを1回コンパイルし(.oファイルを生成するか、さらに良いのは単一の.a静的ライブラリ)、後で各テストにリンクすることです。その場合、gcovは結果を自動的にシングル.gcno/.gcdaペアにマージします(gcovファイルにアクセスする際の競合を避けるために、テストをシリアルに実行する必要があることに注意してください)。

于 2022-01-09T05:53:14.187 に答える