Search code examples
code-coveragegcovlcov

how to change the path of source file which was referred gcda?


When i build my project for coverage testing with "--coverage -fprofile-arcs -ftest-coverage", and then move the build and source to the other user directory to execute testing. I will get so many problems such as "xxx/cc/cc/getopt_log.c:cannot open source file"

the details as the below: Processing cs/CMakeFiles/cfa/__/src/base/fault_injection.c.gcda /home/cov/build/xfcq/src/base/fault_injection.c:cannot open source file

the path of "/home/cov/build/xfcq/src/base/fault_injection.c" is the path of build environment, how to change it as the relative path or the path I specified.

I tried to use GCOV_PREFIX and GCOV_PREFIX_STRIP, these can't work well for me.

I also tried to add -b option for lcov, it does not also work well for me. e.g., lcov --gcov-tool=/bin/gcov -d . -b xx/src -t "xfcq" -o test_cov.info

do you have idea to resolve it?


Solution

  • For using gcov coverage process, maybe instead of moving files you can try modifying your automated build scripts to build everything to the desired location.

    When you compile your project with the specified options it generates *.gcno files for each source file which are necessarily the flow chart like details of the relevant source file.
    So, the object files are instrumented in such a way that they should trigger function(added by compiler to generate coverage info ) whenever any line of statement is executed to generate *.gcda files with all the execution information.
    Note: I can see that you have specified three options in question (--coverage -fprofile-arcs -ftest-coverage) which is redundant, as --coverage works as a replacement to the other two.

    If you specify only --coverage then it will do for the compilation and the linking too.(remember to use it at both the places positively though)