以前にも似たような質問がたくさんありました:
- ヘッダーのみのライブラリの有用な GCov 結果の取得
- よく使用されるクラスのヘッダー ファイルで gcov が 0% のカバレッジを報告するのはなぜですか?
- gcov がヘッダー ファイルのカバレッジ情報を生成していない
ほんの数例を挙げると。しかし、それらのどれも私自身の問題を解決するのに役立ちませんでした。
ソースコードをgcc バージョン 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)でコンパイルしています。
g++ -c -pipe -Wno-psabi -std=gnu++11 -Wextra -pedantic -fprofile-arcs -ftest-coverage --coverage -fno-inline -fno-inline-small-functions -fno-default-inline -O0 -fno-elide-constructors -g -Wall -W -o .obj/myclass.o unittest_myclass.cpp
次に、ソースファイルの 1 つでgcov (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4を実行します。
gcov unittest_myclass.cpp -o .obj/
このファイルには、ヘッダーのみのクラスの単体テストが含まれています。gcov は、このヘッダー ファイルのカバレッジ情報を正常に生成します。
File '../include/myclass.h'
Lines executed:11.05% of 173
Creating 'myclass.h.gcov'
ただし、myclass.h.gcovの結果は間違っています。ほとんどの行について、gcov は、実行可能コードが含まれていないと報告しています。実行可能として検出されたものについては、ほとんどの場合、実行されていないことが報告されます。しかし、それらが実行されていることは確かです (デバッグ中に確認しました。一部の単体テストはバグにより失敗するなど)。テンプレートは関係ありません。したがって、何らかの理由で gcov が正しい実行を検出できないと推測します。上記のコマンドライン引数からわかるように、最適化がオフになっており、インライン化がオフになっています...
他に何がこれらの問題を引き起こす可能性がありますか?