Come posso eseguire gcov su un'applicazione Cocoa installato?
-
27-09-2019 - |
Domanda
Ho un applicazione Cocoa che utilizza un programma di installazione. Voglio essere in grado di eseguire la copertura del codice sul codice (dopo che è stato installato).
Questo non è il solito unità-test scenario in cui un singolo binario verrà eseguito una serie di test. Piuttosto, le prove in questione potranno interagire con l'interfaccia utente e l'applicazione di back-end mentre è in funzione, in modo che idealmente voglio essere in grado di avviare l'applicazione sapendo che gcov è profiling e poi eseguire test contro di esso.
Tutte le idee?
Aggiorna
Grazie a mustISignUp. Per chiarire il motivo per cui ho fatto la domanda:
L'errore che ho fatto è stato pensare che l'oggetto, .gcno e .gcda file doveva essere installato a fianco dei binari (rendendo così il programma di installazione difficile). Come spesso accade, la posizione originale dei file è hard-wired nel codice insieme al codice strumentazione.
La soluzione sono andato con è zippare il codice sul sistema di compilazione e metterlo su disco sulla macchina di prova. lcov
(o semplicemente gcov
) possono essere eseguiti da lì. In alternativa, verranno creati i file .gcda su disco e devono essere copiati indietro fino alla macchina che contiene il codice sorgente.
In entrambi i casi, il codice sorgente non deve essere presente durante l'installazione e la fase di esecuzione, ma se si vuole per ottenere i risultati indietro lcov stile, i file contatore copertura prodotte deve conciliarsi con il codice sorgente.
Soluzione
L'applicazione deve essere compilato con le bandiere del CCG corrette che inserire le istruzioni di profilazione nel codice. Non è qualcosa che si può accendere e spegnere. vale a dire il codice viene modificato in fase di compilazione per emettere le informazioni di copertura.
Quindi, se è stato compilato l'applicazione con le bandiere giuste emetterà i dati di copertura, se non l'avete fatto, non lo farà (e certamente non vorrebbe a per un app che stavi per la distribuzione).