【问题标题】:Is it possible code coverage of a shared library using gcov?是否可以使用 gcov 对共享库进行代码覆盖?
【发布时间】:2012-11-03 08:21:57
【问题描述】:

我尝试测试一个使用 OpenCV 共享库的可执行文件。当使用 gcov 了解覆盖了哪些代码行时,我只能获得有关我的 .cpp 文件和库的 .hpp 的信息。没有显示有关库的 .cpp 文件的信息。

我用 -pg --coverage 标志编译和链接。

【问题讨论】:

    标签: opencv gcov


    【解决方案1】:

    是的,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:}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-05
      • 2011-05-11
      • 1970-01-01
      • 2010-10-06
      • 2013-12-07
      • 2021-12-14
      • 2022-01-09
      • 2012-12-23
      相关资源
      最近更新 更多