2012-01-04 26 views
14

Podążyłem za Claus's post, aby ustawić pokrycie kodu w Xcode 4.2 za pomocą LLVM 3.0. Mogę zobaczyć pliki pokrycia testowego, ale są one przeznaczone tylko dla moich testów jednostkowych, a nie dla rzeczywistych klas projektów. Próbowałem ustawienie Generowanie test zakresu plików i programu aparatu Przepływ do Tak na mój główny cel, ale to nie pomogło, ponieważ nie powiodło się z powodu następującego błędu:Pokrycie kodu za pomocą Xcode 4.2 - Brakujące pliki

fopen $ UNIX2003 zwanego od funkcja llvm_gcda_start_file

Aby to wyjaśnić, nie sądzę, że jest to właściwe podejście - po prostu próbowałem sprawdzić, czy wygeneruje on kod na moich zajęciach projektowych.

W tym momencie z chęcią wypróbuję wszystko, co zapewni zasięg kodu działający na mojej aplikacji. Jakieś sugestie?

Odpowiedz

24

Ty oczekujesz problemu łącznikową, profile_rt biblioteka korzysta fopen$UNIX2003 i fwrite$UNIX2003 funkcje zamiast fopen i fwrite.

Wystarczy dodać następujące .c plik do projektu:

#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); 
} 

Kod ten właśnie remaps brakujące funkcje do standardowych.

Uwaga na $UNIX2003 przyrostkiem:

Znalazłem Apple document mówiąc:

The UNIX™ conformance variants use the $UNIX2003 suffix.

Important: The work for UNIX™ conformance started in Mac OS 10.4, but was not completed until 10.5. Thus, in the 10.4 versions of libSystem.dylib, many of the conforming variant symbols (with the $UNIX2003 suffix) exist. The list is not complete, and the conforming behavior of the variant symbols may not be complete, so they should be avoided.

Because the 64-bit environment has no legacy to maintain, it was created to be UNIX™ conforming from the start, without the use of the $UNIX2003 suffix. So, for example, _fputs$UNIX2003 in 32-bit and _fputs in 64-bit will have the same conforming behavior.

więc spodziewać libprofile_rt być połączone wobec 10,4 SDK.

+1

Dodanie tego pliku .c do mojego projektu w XCode 4.3.2 i włączenie pokrycia i oprzyrządowania dla mojego głównego celu (tylko debugowanie) działało! Po raz pierwszy mam w pełni funkcjonalny zasięg kodu pracujący nad rozwojem iOS. Zintegrowałem go nawet z Jenkinsem przy użyciu gcovr i wtyczki Coburtura. –

+0

To działa dla mnie w 99% przypadków, ale wciąż mam awarię. jakieś pomysły? Nasze środowisko testowe uruchomi ponownie aplikację 100 razy. Na nocnych trasach zawsze się pojawia, ale bardzo sporadycznie –

+0

@BrianKing Powinieneś prawdopodobnie złożyć osobne pytanie ze szczegółami na temat awarii. – iHunter