5

ソースの各行の実行頻度を確認するために Linux(Ubuntu) で gcov を使用しようとしています。

gcc コンパイラとリンカー フラグに次のフラグを追加しました。

CCFLAGS =  -fprofile-arcs -ftest-coverage
LDFLAGS = -fprofile-arcs -lgcov

しかし、プログラムをコンパイルして実行した後、*.gcda ファイルが作成されていません。その結果、実行すると

gcov  --object-directory <path to the *.gcno/*.gcda files> myfile.cpp 

エラーが表示されます:

myfile.gcda:cannot open data file, assuming not executed
File '../../../../../code/myfile.cpp'
Lines executed:0.00% of 2625

私は何かが欠けていますか?これを修正する方法は?

4

2 に答える 2

4

コード内で __gcov_flush() メソッドを使用できます。これは、登録済みのシグナル ハンドラから呼び出す必要があります。

見る:

https://www.osadl.org/fileadmin/dam/interface/docbook/howtos/coverage.pdf

これを使用すると、サービスの実行を維持し、カバレッジ データをダンプする必要があるときはいつでも "kill" を発行できます。

それが役立つことを願って....

于 2012-12-20T20:58:14.257 に答える
0

gcov と gcc が同じバージョンであることを確認してください:)、これは多くの人がチェックに失敗する場所です。

$gcc --version
gcc (GCC) 4.1.1
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ find  /usr/lib/gcc -name libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/32/libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/32/libgcov.a
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/libgcov.a

したがって、ロードした gcc バージョンは、少なくとも libgcov.a の利用可能なリストに含まれている必要があります。

于 2014-03-21T14:51:51.990 に答える