如何使用gcovr for iOS生成Cobertura格式的xml文件?

use*_*441 5 code-coverage ios6

我正在使用Apple LLVM Compiler 4.1在Xcode 4.5上运行的iOS项目上生成代码覆盖率数据文件(.gdca和.gcno).

文件正在Library/Developer/Xcode/DerivedData/viewer-evgaabclrjcouydwveuptwroeofm/Build/Intermediates/viewer.build/Coverage-iphonesimulator/viewer_generic/viewer_generic.build/Objects-normal/i386下生成.

所有(.o,.d,.dia,.gcda,.gdno)文件都在此目录下.没有子文件夹.

我可以使用Cover Story打开单个.gcda文件.现在我想生成一个可以使用cobertura查看的报告.

我正在尝试使用gcovr.在终端我到了上面的文件夹

Command: gcovr -r `pwd` -x -v

Output:
(Several lines of similar output as below)
Running gcov: 'gcov /Users/abc/Library/Developer/Xcode/DerivedData/viewer-evgaabclrjcouydwveuptwroeofm/Build/Intermediates/viewer.build/Coverage-iphonesimulator/viewer_generic/viewer_generic.build/Objects-normal/i386/FILE_NAME.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /Users/abc/Library/Developer/Xcode/DerivedData/viewer-evgaabclrjcouydwveuptwroeofm/Build/Intermediates/viewer.build/Coverage-iphonesimulator/viewer_generic/viewer_generic.build/Objects-normal/i386' in '/Users/abc/Library/Developer/Xcode/DerivedData/viewer-evgaabclrjcouydwveuptwroeofm/Build/Intermediates/viewer.build/Coverage-iphonesimulator/viewer_generic/viewer_generic.build/Objects-normal/i386'
    Parsing coverage data for file /Users/abc/Documents/Perforce/DPS-MacBookPro/depot/sandbox/Viewer-Labatt/Blue/viewers/ipadviewer/iphone/apps/viewer/Classes/view/zooming/FILE_NAME.mm
    Filtering coverage data for file /Users/abc/Documents/Perforce/DPS-MacBookPro/depot/sandbox/Viewer-Labatt/Blue/viewers/ipadviewer/iphone/apps/viewer/Classes/view/zooming/FILE_NAME.mm
    Gathered coveraged data for 0 files
    <?xml version="1.0" ?>
    <!DOCTYPE coverage
      SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>
    <coverage branch-rate="0.0" line-rate="0.0" timestamp="1354144430" version="gcovr 2.4 (r2774)">
        <sources>
            <source>
                /Users/abc/Library/Developer/Xcode/DerivedData/viewer-evgaabclrjcouydwveuptwroeofm/Build/Intermediates/viewer.build/Coverage-iphonesimulator/viewer_generic/viewer_generic.build/Objects-normal/i386
            </source>
        </sources>
        <packages/>
    </coverage>
Run Code Online (Sandbox Code Playgroud)

我看到一个警告:gcno:版本'404',更喜欢'402'

请帮我弄清楚为什么gcovr无法生成报告.

chu*_*owa 6

Tl; dr:LLVM输出的代码覆盖率文件比gcovr预期的更新.如果您使用链接版本(版本2.4)替换您的gcovr版本,那么它应该可以工作.也许.

在LLVM之前,Xcode使用GCC作为其编译器.GCC包含一个名为'gcov'的工具,它生成了所有这些文件,.gcno,.gcda及其同类.

那时候,Macs预装了(现在仍然是)GCC版本4.2.因此,Xcode将使用gcc 4.2编译您的项目,然后运行gcov 4.2版,这将生成4.2版本的测试覆盖文件.这对gcovr来说很好,因为2.0之前的alpha版本似乎是用gcov 4.2编写的.

但是,当苹果公司改用LLVM时,情况就变得很糟糕了.如果在目标设置中设置"生成测试覆盖率文件"标志,LLVM还会输出gcov样式的测试覆盖率文件.但是,LLVM默认输出gcov 4.4文件,而不是4.2.

这个人的想法是,如果我们可以告诉LLVM输出4.2版本的文件(我认为它可能在技术上可以),那么它将解决问题.这可能是真的,但我不知道该怎么做.

然而,我确实找到了自己的解决方案.我打开终端,检查了我的gcovr版本:

gcovr --version
Run Code Online (Sandbox Code Playgroud)

它告诉我,我的gcovr版本实际上是gcovr 2.0-prerelease.此版本不支持gcov 4.4版本的测试覆盖率文件.

所以我发现了一个版本.

这是托管它的页面:https://software.sandia.gov/trac/fast/wiki/gcovr

以下是脚本本身的链接:https://software.sandia.gov/trac/fast/export/2800/gcovr/trunk/scripts/gcovr

这个脚本是gcovr 2.4,它支持最高gcc 4.8.从理论上讲,它应该对LLVM输出的4.4版本的测试覆盖文件非常满意.这个警告现在完全消失了.试一试,让我知道它是怎么回事!