我有一个 C++ 库 (.so),它由另一个应用程序使用 dlopen() 打开。但是我需要在使用 gcov 的应用程序中运行时找到这个库的代码覆盖率。可能吗?如果是,怎么做?
如果不是,该问题如何解决?
我有一个 C++ 库 (.so),它由另一个应用程序使用 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