Is there a way to focus lcov code coverage reports to just one or two directories?

痴心易碎 提交于 2019-12-18 10:33:39

问题


I recently started using lcov to visualize my code coverage. It's a great tool.

One thing I'm noticing is that it generates code coverage reports for all the files that I'm using - including those that I'm not interested in. For example, it will give me code coverage reports for boost and mysql++ files.

Is there an easy way to force lcov to only generate coverage reports for specific files?

I have tried using the -k parameter like so:

/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info

{run unit tests now}

/usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info
/usr/bin/genhtml -q -o lcov_output_directory app_total.info

(Meaning that I only want coverage files for the "include" and "src" directories.)

However, this doesn't seem to work. The report still shows me all the extraneous files. Any suggestions are very much appreciated. Thanks!


回答1:


lcov supports a command line argument --remove to do exactly what you are asking for.




回答2:


I used the --no-external flag together with the --directory flag to exclude unwanted files.

The definition of external from the man:

External source files are files which are not located in one of the directories specified by --directory or --base-directory.

So my command looked like this:

$ lcov  --directory src -c -o report.info --no-external
Capturing coverage data from src
Found gcov version: 4.2.1
Scanning src for .gcda files ...
Found 4 data files in src
Processing src/C####.gcda
  ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h



回答3:


A possible approach is to constrain which files are compiled with the coverage flags (-fprofile-arcs -ftest-coverage). If you don't want to engineer your make file system to be selective about which files are built with test instrumentation, the following trick might work for you:

  • Build your application without instrumentation.
  • Remove the .o files for source that you want to instrument
  • Turn on instrumentation and rebuild. Only the deleted object files will be rebuilt with instrumentation.
  • Run lcov

This should result in only the targeted areas emitting gcov artifacts, which are blindly consumed by the lcov scripts.



来源:https://stackoverflow.com/questions/837639/is-there-a-way-to-focus-lcov-code-coverage-reports-to-just-one-or-two-directorie

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!