GCOVでGCC 4.9を使用してコードと分岐カバレッジを取得しています。しかし、ブランチカバレッジの結果は、私のC++コードではまったく役に立たない。私が知っているすべての-fno-*-inline
フラグを使用しているにもかかわらず、GCCインラインテンプレートのようです。gcovでテンプレートのインライン展開を抑制する方法
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: .
------------------------------------------------------------------------------
File Branches Taken Cover Missing
------------------------------------------------------------------------------
test.cpp 14 7 50% 7,8,9,10
------------------------------------------------------------------------------
TOTAL 14 7 50%
------------------------------------------------------------------------------
がありません:test
、gcovr -r . -b
プリントを実行した後
#include <string>
#include <iostream>
using namespace std;
int main() {
string foo;
foo = "abc";
cout << foo << endl;
}
は私がg++ -O0 -fno-inline -fno-inline-small-functions -fno-default-inline --coverage -fprofile-arcs test.cpp -o test
でプログラムをコンパイルします。ここでは
は、問題を示し、小さなサンプルアプリケーションであります私達のmain
機能の単一のブランチ。たとえば、7行目には
string foo;
が含まれています。
std::basic_string<...>
のコンストラクタにはif文が含まれているようですが、
main
のカバレッジを見ると有用な情報ではありません。
これらのすべてのインラインブランチが合計され、実際のユニットテストで計算されたブランチカバレッジは約40%です。私は、C++標準ライブラリでどのくらいのブランチを打つのかとは対照的に、私のコードのブランチカバレッジに興味があります。
コンパイラのインライン化を完全にシャットダウンする方法や、GCOVにインラインブランチを考慮させないように指示する方法はありますか?私はGCOVのホームページやそのトピックに関する他のガイドを見つけることができませんでした。
ご迷惑をおかけして申し訳ありません。
そして、gcovの出力ファイルには何が表示されますか?すべてのstdライブラリコードは、インライン化されていなくても要約の中の 'test.cpp'に帰属しますが、詳細な出力はどのブランチが実際にどの関数が現れるかを示すはずです。 – Useless