2012-12-19 33 views
5

Linux(Ubuntu)でgcovを使用して、ソースの各行の実行頻度を確認しようとしています。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 

私は何かが足りません。これを修正するには?

+0

の利用可能なリストに少なくともすべきですか? –

+0

また、 'string compiled_prog |を実行するとどうなりますか? grep gcda'? –

+0

@Shawn - 戻ってこないサービス/デーモン。だから本質的に私はそれを停止するには、ターミナルで実行可能ファイルをCTRL-Cする必要があります。これはgcovの動作に影響しますか?私はgpr​​ofがexit()をしないプロセスのプロファイリングデータを生成しないことを知っています。 gcovにもその制限がありますか? – goldenmean

答えて

4

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

参照:これを使用して

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

、あなたはカバレッジデータをダンプする必要がある場合は、必ず「殺す」あなたのサービスを実行し、問題を維持することができます。

希望に役立ちます....

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

関連する問題