2012-01-04 8 views
14

Ho seguito Claus's post per impostare la copertura del codice su Xcode 4.2 con LLVM 3.0. Sono in grado di vedere i file di copertura del test, ma sono solo per le mie classi di test dell'unità, non per le mie effettive classi di progetto. Ho provato a installare generare copertura dei test file e Programma di flusso strumento a il mio obiettivo principale, ma che non ha aiutato, in quanto non è riuscita con il seguente errore:Copertura del codice con Xcode 4.2 - File mancanti

fopen $ UNIX2003 chiamato da function llvm_gcda_start_file

Per chiarire, non penso che sia nemmeno l'approccio giusto - l'ho appena provato per vedere se generasse la copertura del codice sulle mie classi di progetto.

A questo punto, sarei felice di provare qualsiasi cosa che funzioni sulla copertura del codice sulla mia app. Eventuali suggerimenti?

risposta

24

È aspettate problema linker, profile_rt Library utilizza fopen$UNIX2003 e fwrite$UNIX2003 funzioni invece di fopen e fwrite.

Tutto ciò che serve è quello di aggiungere il file di .c segue al progetto:

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

Questo codice rimappa solo le funzioni mancanti a quelli standard.

Nota sulla $UNIX2003 suffisso:

ho trovato un Apple document dicendo:

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.

quindi mi aspetto libprofile_rt da collegare contro 10.4 SDK.

+1

Aggiungendo questo file .c al mio progetto in XCode 4.3.2 e attivando copertura e strumentazione per il mio obiettivo principale (solo debug) ha funzionato! Questa è la prima volta che utilizzo la copertura del codice completamente funzionale per lo sviluppo di iOS. L'ho persino integrato con Jenkins usando gcovr e il plugin Coburtura. –

+0

Questo funziona per il 99% delle volte, ma continuo a causare un arresto casuale. qualche idea? Il nostro framework di test riavvierà l'app centinaia di volte. Nelle corse notturne e si verifica sempre, ma in modo molto intermittente –

+0

@BrianKing Probabilmente dovresti presentare una domanda a parte con i dettagli sul crash. – iHunter