4

次のようなテストコードがあります。

int diff21(int n)
{
    if (n <= 21)
    {
        return 21 - n;
    }
    else
    {
        return (n - 21) * 2;
    }
}

コンパイル フラグを追加しました:-fprofile-arcs -ftest-coverageカバレッジ データを提供します。

テストコードを次のように書きました。

CU_ASSERT(diff21(19) == 2);

lcov を使用して html レポートを生成したところ、elseブランチreturn (n - 21) * 2が実行されたと表示されたので、100% の行カバレッジが得られました。本当じゃない

グーグルで検索したところ、これが原因であることがわかりました--- gcc の最適化により、いくつかの単純なコード行を他の行と組み合わせて削除できますが、フラグを使用しない場合、どのようにカバレッジ データを生成すればよいでしょうか?-fprofile-arcs -ftest-coverage

ところで、私は netbeans と cygwin を使用して単体テストを行っていますgcovが、makefile やスクリプトを手動で呼び出すのは私にとって良いことではないと思います。

参考までに、私は次のようにlcovを使用しています:

#!/bin/bash

rm -rf coverage_report
rm -f app.info

lcov -b . -d . -c -o app.info
mkdir coverage_report
genhtml --legend --highlight -o coverage_report app.info
rm -f app.info
lcov -d . -z
4

1 に答える 1

-1

-O0フラグを付けてコンパイルしてみてください。

于 2012-09-20T08:38:00.020 に答える