プロジェクトで gcov を正常に使用しています。
- gcov フラグを使用してプロジェクトをビルドできます。
-fprofile-arcs -ftest-coverage
-lgcov
オプションと連動- 単体テスト プログラムを実行すると、多数の
gcda
andgcno
ファイルが生成されます。 - gcov を何度も実行すると、大量の
gcov
ファイルが生成されます。 - 結果を要約し、次のような行のリストを作成します。
#####: 42: virtual double run_time() const { return 0; }
私はそれから「ドッ!」に行きます。不足しているメソッドを呼び出すテストを作成します。
上記の例の行は非常に簡単に診断できます.gcovは、私が呼び出していない正確なメソッドを教えてくれました.
gcov によってフラグが付けられたコピー コンストラクターの例もありましたが、Visual Studio デバッガーを使用してステップ実行できます。そこでの解決策は、gcov がコピーを省略した RVO に苦しんでいることを認識することでしたが、コピーを強制するテストを作成することでそれが修正されました。
私が理解できない他の例がいくつかあります。
1.
File.cpp
#####: 78:}
gcov は、ファイルの最後の行である名前空間の右中括弧にフラグを立てているようです。
2.
File.h
#####: 33: class FooBase: public IResult {
ここでgcovが私に伝えようとしているのは何ですか? ここにかける電話が思い浮かびません。
更新 1:デフォルトのコンストラクターがあることを検出しました。これFooBase
は、サブクラスによってのみ「呼び出される」場合、インスタンス化して呼び出すことと同じではありませんgcov
。
Update 2: I've been using djgpp/gcc 4.4.4
which produced the above results. However, by using MinGW/gcc 4.5.2
the 'aberrations' disappear and with a little more work I've been able to get to 100% line coverage.
Please write your answers with either a single tip for the unwary gcov user, or an answer to one of my examples.