我跟着Claus's post使用LLVM 3.0在Xcode 4.2上设置代码覆盖率。我能够看到测试覆盖文件,但它们只适用于我的单元测试类,而不是我的实际项目类。我已经尝试在我的主要目标上将生成测试覆盖率文件和仪器程序流程设置为是,但这没有帮助,因为它失败,出现以下错误:
fopen $ UNIX2003从函数llvm_gcda_start_file调用
为了澄清,我认为这甚至不是正确的方法 - 我只是试着看它是否会在我的项目类中生成代码覆盖。
此时,我很乐意尝试在我的应用上运行代码覆盖的任何内容。有什么建议吗?
答案 0 :(得分:24)
您期待链接器问题,profile_rt
库使用fopen$UNIX2003
和fwrite$UNIX2003
函数而不是fopen
和fwrite
。
您只需将以下.c
文件添加到项目中:
#include <stdio.h>
FILE *fopen$UNIX2003( const char *filename, const char *mode )
{
return fopen(filename, mode);
}
size_t fwrite$UNIX2003( const void *a, size_t b, size_t c, FILE *d )
{
return fwrite(a, b, c, d);
}
此代码只是将缺少的函数重新映射为标准函数。
关于$UNIX2003
后缀的说明:
我发现了Apple document说:
UNIX™一致性变体使用$ UNIX2003后缀。
重要提示:UNIX™一致性的工作在Mac OS 10.4中开始,但直到10.5才完成。因此,在10.4版本的libSystem.dylib中,存在许多符合变体的符号(带有$ UNIX2003后缀)。列表不完整,变体符号的符合行为可能不完整,因此应避免使用。
因为64位环境没有遗留维护,所以它从一开始就被创建为符合UNIX™,而不使用$ UNIX2003后缀。因此,例如,32位的_fputs $ UNIX2003和64位的_fputs将具有相同的符合性行为。
所以我希望libprofile_rt
与10.4 SDK相关联。
答案 1 :(得分:2)
我为.gcda
和.gcno
文件使用CoverStory http://code.google.com/p/coverstory/ GUI。
文档说明了生成这些文件所需的设置http://code.google.com/p/coverstory/wiki/UsingCoverstory。