【问题标题】:How to find the coverage of a library opened using dlopen()?如何找到使用 dlopen() 打开的库的覆盖范围?
【发布时间】:2011-09-16 02:57:20
【问题描述】:

我有一个 C++ 库 (.so),它由另一个应用程序使用 dlopen() 打开。但是我需要在使用 gcov 的应用程序中运行时找到这个库的代码覆盖率。可能吗?如果是,怎么做?

如果没有,问题如何解决?

【问题讨论】:

    标签: c++ code-coverage dlopen gcov


    【解决方案1】:

    首先,您是否使用--coverage 标志编译了您的C++ 库?我以前从未真正使用过带有 gcov 的“.so”库,所以我不确定它是否能正常工作。

    其次,您能否安排应用程序的测试版本不使用 dlopen(),而是链接到您的库的静态库 (.a) 版本并仍然进行通常的调用?

    【讨论】:

      【解决方案2】:

      是的。可以生成dlopen加载的共享库的覆盖率。

      1) 编译带有标志-fprofile-arcs -ftest-coverage 的共享库

      2) 编译使用dlopen 和标志-fprofile-arc -ftest-coverage 的程序

      3) lcov 生成.info 文件

      lcov --capture --rc lcov_branch_coverage=1 --directory path/to/.gcda --output-file coverage.info 
      

      4) 生成html

      genhtml coverage.info --branch-coverage --output-directory out 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多