2

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

如果不是,该问题如何解决?

4

2 回答 2

0

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

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

于 2011-06-19T21:43:28.813 回答
0

是的。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 
于 2019-10-31T05:22:47.073 回答