3

OpenCV 共有ライブラリを使用する実行可能ファイルをテストしようとしています。どのコード行がカバーされているかを知るために gcov を使用すると、ライブラリの .cpp ファイルと .hpp に関する情報しか得られません。ライブラリの .cpp ファイルに関する情報は表示されません。

-pg --coverage フラグを使用してコンパイルおよびリンクしました。

4

1 に答える 1

7

はい、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:}
于 2012-11-15T02:26:40.827 に答える