web-dev-qa-db-ja.com

lcovコードカバレッジレポートを1つまたは2つのディレクトリに集中させる方法はありますか?

最近、コードカバレッジを視覚化するためにlcovを使い始めました。それは素晴らしいツールです。

私が気づいていることの1つは、使用しているすべてのファイル(興味のないファイルを含む)のコードカバレッジレポートを生成することです。たとえば、boostファイルとmysql ++ファイルのコードカバレッジレポートが表示されます。

Lcovに特定のファイルのカバレッジレポートのみを生成させる簡単な方法はありますか?

私は次のように-kパラメータを使用してみました:

/usr/bin/lcov -q -c -i-b。 -d .obj -k src/-k include/-o app_base.info 
 
 {今すぐユニットテストを実行} 
 
/usr/bin/lcov- q -c-b。 -d .obj -k src/-k include/-o app_test.info 
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info 
/usr/bin/genhtml -q -o lcov_output_directory app_total.info 

(「include」ディレクトリと「src」ディレクトリのカバレッジファイルのみが必要であることを意味します。)

ただし、これは機能していないようです。レポートには、まだすべての無関係なファイルが表示されます。どんな提案でも大歓迎です。ありがとう!

26
Runcible

lcov コマンドライン引数をサポートします--removeは、要求していることを正確に実行します。

30
lothar

--no-externalフラグを--directoryフラグと一緒に使用して、不要なファイルを除外しました。

男性からの外部の定義:

外部ソースファイルは、-directoryまたは--base-directoryで指定されたディレクトリのいずれにも配置されていないファイルです。

したがって、私のコマンドは次のようになりました。

$ lcov  --directory src -c -o report.info --no-external
Capturing coverage data from src
Found gcov version: 4.2.1
Scanning src for .gcda files ...
Found 4 data files in src
Processing src/C####.gcda
  ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h
31
peetasan

考えられるアプローチは、カバレッジフラグ(-fprofile-arcs -ftest-coverage)を使用してコンパイルされるファイルを制限することです。 makeファイルシステムを設計して、テストインストルメンテーションでビルドするファイルを選択したくない場合は、次のトリックが役立つ可能性があります。

  • インストルメンテーションなしでアプリケーションを構築します。
  • インストルメントするソースの.oファイルを削除します
  • インストルメンテーションをオンにして再構築します。削除されたオブジェクトファイルのみがインストルメンテーションで再構築されます。
  • Lcovを実行します

これにより、ターゲット領域のみがgcovアーティファクトを放出し、lcovスクリプトによって盲目的に消費されます。

2
Jeremy Mayhew