2012-01-04 19 views
14

Seguí Claus's post para configurar la cobertura de código en Xcode 4.2 con LLVM 3.0. Puedo ver los archivos de cobertura de prueba, pero son solo para mis clases de prueba de unidad, no para mis clases de proyecto reales. He tratado de establecer Generar Prueba de Cobertura archivos y el flujo del programa Instrumento a en mi objetivo principal, pero eso no ayuda, ya que produjo el siguiente error:Cobertura de código con Xcode 4.2 - Archivos perdidos

fopen $ UNIX2003 llamado desde function llvm_gcda_start_file

Para aclarar, no creo que sea el enfoque correcto, solo lo intenté para ver si generaría una cobertura de código en mis clases de proyectos.

En este punto, me gustaría probar cualquier cosa que funcione con la cobertura del código en mi aplicación. ¿Alguna sugerencia?

Respuesta

24

Usted está esperando problema enlazador, profile_rt biblioteca utiliza fopen$UNIX2003 y fwrite$UNIX2003 funciones en lugar de fopen y fwrite.

Todo lo que necesita es añadir el .c siguiente archivo a su proyecto:

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

Este código sólo vuelve a asignar las funciones que faltan a las estándar.

Nota sobre $UNIX2003 sufijo:

he encontrado un Apple document diciendo:

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.

por lo que espero libprofile_rt se enlace con 10,4 SDK.

+1

Agregando este archivo .c a mi proyecto en XCode 4.3.2 y activando la cobertura y la instrumentación para mi objetivo principal (solo depuración) ¡funcionó! Esta es la primera vez que tengo una cobertura de código completamente funcional que funciona para el desarrollo de iOS. Incluso lo integré con Jenkins usando gcovr y el plugin Coburtura. –

+0

Eso me funciona el 99% del tiempo, pero todavía recibo un colapso al azar. ¿Alguna idea? Nuestro marco de prueba reiniciará la aplicación cientos de veces. En carreras nocturnas y siempre ocurre, pero muy intermitentemente –

+0

@BrianKing Probablemente deba presentar una pregunta por separado con detalles sobre su bloqueo. – iHunter

Cuestiones relacionadas