【发布时间】:2011-09-16 02:57:20
【问题描述】:
我有一个 C++ 库 (.so),它由另一个应用程序使用 dlopen() 打开。但是我需要在使用 gcov 的应用程序中运行时找到这个库的代码覆盖率。可能吗?如果是,怎么做?
如果没有,问题如何解决?
【问题讨论】:
标签: c++ code-coverage dlopen gcov
我有一个 C++ 库 (.so),它由另一个应用程序使用 dlopen() 打开。但是我需要在使用 gcov 的应用程序中运行时找到这个库的代码覆盖率。可能吗?如果是,怎么做?
如果没有,问题如何解决?
【问题讨论】:
标签: c++ code-coverage dlopen gcov
首先,您是否使用--coverage 标志编译了您的C++ 库?我以前从未真正使用过带有 gcov 的“.so”库,所以我不确定它是否能正常工作。
其次,您能否安排应用程序的测试版本不使用 dlopen(),而是链接到您的库的静态库 (.a) 版本并仍然进行通常的调用?
【讨论】:
是的。可以生成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
【讨论】: