3

以前にも似たような質問がたくさんありました:

ほんの数例を挙げると。しかし、それらのどれも私自身の問題を解決するのに役立ちませんでした。

ソースコードを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 が正しい実行を検出できないと推測します。上記のコマンドライン引数からわかるように、最適化がオフになっており、インライン化がオフになっています...

他に何がこれらの問題を引き起こす可能性がありますか?

4

1 に答える 1

2

問題は私のクラスがヘッダーのみであるという事実ではなく、gcovを

gcov unittest_myclass.cpp -o .obj/

代わりにそれを実行すると

gcov *.cpp -o .obj/

それは報告します

File '../include/myclass.h'
Lines executed:95.56% of 248
Creating 'myclass.h.gcov'

結果のmyclass.h.gcovファイルは、私が期待したものよりもはるかに多く見えます.

于 2016-12-06T12:52:34.347 に答える