23

コード カバレッジ メトリックに lcov を使用しようとしていますが、ブランチ カバレッジが機能しません。

これが私がそれを使用している方法です:

g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test 
lcov --zerocounters --directory $PWD 
lcov --capture --initial --directory $PWD --output-file coverage_output  
./bin/test 
lcov --no-checksum --directory $PWD --capture --output-file coverage_output 
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output

しかし、私は得る:

全体的なカバー率:
行......: 100.0% (60 行中 60 行)
関数..: 100.0% (26 関数中 26 行)
分岐...: データが見つかりません

何か案は?

4

4 に答える 4

35

LCOV の最新バージョンでは、デフォルトでブランチ カバレッジが無効になっていました。

次のいずれかで再度有効にする必要があります。

  • ~/.lcovrcファイル (/etc/lcovrc からコピー) を編集してlcov_branch_coverage設定を 1に変更する
  • --rc lcov_branch_coverage=1lcov コマンドラインへの追加
于 2013-01-25T14:14:50.373 に答える
0

申し訳ありませんが、すべてが正しく行われていることを確認するほどの「アイデア」ではありません。あなたの正確なコマンドはこの単純なコードで機能しました:

#include <iostream>
using namespace std;

bool foo(int i)
{
    if (i != 0) {
        return 12 / i;
    } else {
        return 0;
    }
}

int main(int argc, char** argv)
{
    cout << foo(argc) << endl;
    return 0;
}

lcovカバレッジテーブルには、ライン、関数、およびブランチの統計があります。たぶん、あなたが実際に正しい出力HTMLを見ていることを再確認しますか?

于 2012-09-11T14:54:21.313 に答える
0

この投稿に基づいて、違いは使用している gcc のバージョンに依存する場合があります。使用しているバージョンを共有できますか。私は次のブランチのカバレッジを取得していません:

 i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
于 2014-02-03T19:21:13.157 に答える