Domanda

Sto usando Xcode 3.2 a 10.6, con la versione fornita di gcov e compilatore di default GCC (sia la versione 4.2.1). Ho creato un fascio test di unità di cacao dipendente, che viene iniettato nel mio app, e seguito la documentazione di Apple su la creazione di un gcov strumentati accumulo di configurazione -. in base alla configurazione di debug, che non hanno alcun ottimizzazioni del compilatore abilitati

Quando costruisco il fascio di prova con questa configurazione 'gcov strumentati', i lanci app e le prove vengono iniettati e correre. Anche i file di statistiche di copertura vengono generati a:

  

build/<AppTarget>.build/Gcov-instrumented/<AppTarget>.build/Objects-normal/x86_64/<object>.gcda

     

build/<AppTarget>.build/Gcov-instrumented/<AppTarget>.build/Objects-normal/x86_64/<object>.gcno

Fin qui tutto bene. So che i test siano effettivamente eseguiti, perché se inserisco fallimenti poi la suite di test ha esito negativo come previsto. Purtroppo, gcov riferisce che nessuna riga degli oggetti sono state coperte dai test! Ogni linea è segnalato come 0 copertura. Ho cercato qui e presso l'archivio della mailing list di Apple, e non riesco a trovare nessuno con un problema simile. Mi aspetto che mi manca qualcosa - ma che cosa è che

?
È stato utile?

Soluzione

Sono stato in esecuzione in questo problema in modo intermittente. Mi sono imbattuto in un buon periodo di tempo fortunato dove è stato "lavorato per lo più" nel mio progetto principale. Con la maggior parte di lavoro voglio dire che ero in grado di ottenere una copertura di presentarsi, ma con un po 'più dolore rispetto a 10,5. Ho dovuto eliminare in modo aggressivo i file di copertura e ricostruire al fine di ottenere eventuali aggiornamenti, per esempio. Anche nel mio stato "a malapena di lavoro", il compilatore / runtime non sembra disposto a sovrascrivere un file di dati di copertura esistente.

Credo di aver inciampato di nuovo in uno scenario di lavoro. Voodoo di sicuro, e meno che ideale:

  1. Assicurarsi che lo SDK è 10,6.
  2. Assicurati che la distribuzione sia impostato a GCC 4.0 (!).
  3. Fare un pulito completo del progetto.
  4. Rebuild.

Questo si ottiene i dati di copertura previsto?

Certo, mi sarei aspettato di essere in grado di generare file di copertura che di lavoro utilizzando gcc 4.2 o uno dei compilatori LLVM, ma per il momento questo sembra avere un po 'meno di me storpio di prima.

Un altro indizio: quando osservo i dati di copertura (utilizzando di Google Cover Story ), ottengo avvertimenti come:

  

/BUILDRESULTS/MarsEdit.build/Code Copertura / MarsEditDataModelTests.build / Oggetti-normali / i386 / MEDataItem.gcno: versione '400A', preferiscono '402 *'

Ma le informazioni di copertura è ancora presentato. Così sembra che è recalcitranti ad una versione precedente formato di copertura, ma se uso il compilatore più recente (4.2) che presumibilmente generare i file .gcno formato più recente, il problema di copertura 0% mi affligge come fa Graham.

Altri suggerimenti

In Xcode 4.6, rapporti di copertura sembrano solo per lavorare. Attivare "Genera copertura dei test Files" e "Flow Programma strumento" per il target applicazione, eseguire i test, quindi scegliere lo strumento di copertura in uscita. Questo è in ~/Library/Developer/Xcode/Derived Data/<Project>-<hash>/Build/Intermediates/<Target>.build/Debug-iphonesimulator/<Target>.build; l'apertura di tale cartella in Coverstory mi mostra i risultati che mi aspettavo.

Questo repository GitHub contiene script in grado di scoprire automaticamente l'uscita e ottenere lcov di visualizzarlo; Sono contento Coverstory per ora.

È possibile ottenere la copertura del codice a lavorare con gcc 4.2.1. Dettagli qui:

SnowLeopardGCov

Ho cercato di ottenere la copertura codice di lavoro per iPhone simulatore e ottenere una copertura 0% sempre. Di seguito sono riportati i dettagli di configurazione e le operazioni che ho provato.

Configurazione

Xcode 3.2.5 / iOS 4.1 e iOS 4.2 / Mac 10.6 / GCC 4.2 Applicazione UICatalog

Riferimenti

http: //www.cubiclemuses .com / cm / articoli / 2009/05/14 / coverstory-on-the-iphone /

http://developer.apple.com/library/mac /#qa/qa2007/qa1514.html

Passi

  • Enable “Genera copertura dei test file”
  • Enable “Programma di flusso dello strumento”
  • Aggiungi “-lgcov” a “Altro Linker Flags”
  • bandiera UIApplicationExitsOnSuspend in Info.plist è impostata su true

Risultato

Ho i file generati .gcda ma la copertura mostrare sempre 0%.

Impostazioni cercato

  1. Modifica GCC per 4.0 e 4.2. Quando provo a cambiare il GCC a 4,0 ricevo 26 errori di generazione.
  2. Set variabili d'ambiente:

    const char *prefix = "GCOV_PREFIX";
    const char *prefixValue = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] cStringUsingEncoding:NSASCIIStringEncoding]; // This gets the filepath to the app's Documents directory
    const char *prefixStrip = "GCOV_PREFIX_STRIP";
    const char *prefixStripValue = "1";
    setenv(prefix, prefixValue, 1); // This sets an environment variable which tells gcov where to put the .gcda files.
    setenv(prefixStrip, prefixStripValue, 1); // This tells gcov to strip the default prefix, and use the filepath that we just declared.)
    
  3. GCC ottimizzazione impostata su Nessuno (-O0) ed incontrollato la bandiera file di intestazione prefisso precompilato.

mi è stato sempre 0 * copertura quando .gcno file per la libreria statica è stato sovrascritti da quelli per la libreria condivisa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top