Today I was tasked with adding unit test coverage analysis to our code base. Today is also the day iOS 7.1 is released along with XCode 5.1. From the release notes:
The gcov tool for code coverage testing has been reimplemented. The new version uses the llvm-cov tool from the LLVM project. It is functionally equivalent to the old version for all significant features. The location of gcov within Xcode has also moved, use xcrun to invoke it. If you find problems, please file bug reports. For this release, you can still use the old version of gcov from GCC, which is available as gcov-4.2. 11919694 updated
https://github.com/jonreid/XcodeCoverage https://github.com/jonreid/XcodeCoverage
The first hurdle was that the new bundled gcov program doesn t support the -v argument to get the version, which is the first step of lcov s initialization. Seemed like a non-starter already, but reading the release notes above I modified the lcov script to use the old gcov-4.2 version and got that solved.
However, lcov errored out very early in processing my coverage data files. This generated a report with maybe the first 10 or so files alphabetically in my project. Not particularly useful. The error output was minimal and unhelpful as well:
geninfo: ERROR: GCOV failed for (build_artifacts)/(class_that_errored).gcda!
I modified the lcov script to print the error it was getting (which only yielded 11 unfortunately, couldn t find any reference in the gcov(-io).c code) and to continue operation instead of quitting, so I was left with a lot more files in the report, but still probably 85% of my source files had errored out as above.
The only pattern I could discern between the files that successfully wound up in the report and the ones that threw an error was that any file that used an in-line block declaration failed. None of the files that passed used blocks in any fashion, and all the files I ve checked that failed contain blocks. Strange.
https://code.google.com/p/coverstory/ https://code.google.com/p/coverstory/
(class_that_errored).gcno:no lines for __copy_helper_block_ (class_that_errored).gcno:no lines for __destroy_helper_block_
My best hypothesis at this point is that the new XCode 5.1 is generating .gcda files that the old gcov-4.2 program isn t equipped to deal with regarding block declarations.
But I ve exhausted everything I can think to try, so I m here to ask if anybody has a piece of knowledge that I ve missed, or has any ideas to further the debugging effort. Or if anyone is successfully measuring test coverage since today s XCode 5.1 update with the new gcov, I d love to hear about any changes you had to make as well.