OpenCV 共有ライブラリを使用する実行可能ファイルをテストしようとしています。どのコード行がカバーされているかを知るために gcov を使用すると、ライブラリの .cpp ファイルと .hpp に関する情報しか得られません。ライブラリの .cpp ファイルに関する情報は表示されません。
-pg --coverage フラグを使用してコンパイルおよびリンクしました。
はい、gcov は共有ライブラリに関するカバレッジ情報を提供できます。私のプロジェクトでこれを機能させるために発生した問題から正しく覚えている場合、おそらく--coverage
動的ライブラリのリンクにフラグを含めていません。これが私が作成できる最小の例です。
メイクファイル:
CXXFLAGS += --coverage
LDFLAGS += --coverage
myexec: myexec.cpp libmylib.so
libmylib.so: mylib.o
gcc --coverage -shared -Wl,-soname,libmylib.so -o libmylib.so mylib.o
mylib.o: CXXFLAGS += -fPIC
myexec.cpp:
#include "mylib.h"
int main(int argc, char** argv)
{
return is_even(argc);
}
mylib.h
#ifndef MYLIB_H
#define MYLIB_H
int is_even(int num);
#endif
mylib.cpp
#include "mylib.h"
int is_even(int num)
{
if (num % 2)
return false;
else
return true;
}
make の出力 (ビルドが何であったかを正確に確認できます):
g++ --coverage -fPIC -c -o mylib.o mylib.cpp
gcc --coverage -shared -Wl,-soname,libmylib.so -o libmylib.so mylib.o
g++ --coverage --coverage myexec.cpp libmylib.so -o myexec
を使用して実行可能ファイルを実行しLD_LIBRARY_PATH="." ./myexec a
、次に実行しましたgcov mylib.cpp
。mylib.cpp.gcov の内容は次のとおりです。
-: 0:Source:mylib.cpp
-: 0:Graph:mylib.gcno
-: 0:Data:mylib.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include "mylib.h"
-: 2:
1: 3:int is_even(int num)
-: 4:{
1: 5: if (num % 2)
#####: 6: return false;
-: 7: else
1: 8: return true;
-: 9:}