2010-06-16 18 views
1

j'ai surmonté tous les problèmes avec la mise en place gcov sur mon projet iPhone, mais maintenant je suis obtenir ce qui suit:Comment configurer les variables d'environnement pour gcov sur iPhone

profiling:/Users:Cannot create directory 

Quelqu'un at-il des suggestions quant à ce que je pourrais avoir mal fait?

I gcov d'installation à l'origine en suivant les instructions de Google qui se trouve par googler « UsingCoverStory »

MISE À JOUR: Ok, alors laissez-moi préciser ce que je suis en train de faire. J'ai une application iPhone que j'essaie de tester automatiquement. J'utilise le cadre UISpec pour piloter l'interface graphique. Ce que je dois vraiment savoir, c'est combien de code je couvre réellement avec mes tests. Je pense que je suis vraiment proche mais j'ai juste besoin de comprendre comment régler correctement les variables environnement/compilateur pour s'adapter à mon projet.

Voici un résumé de ce que j'ai fait jusqu'à présent. J'ai d'abord copié ma cible de construction, spécifié le drapeau de l'éditeur de liens et quelques autres options comme prescrites. (Ceci peut être fait automatiquement en utilisant un AppleScript créé par Google.) Instructions et téléchargement peuvent être trouvés par Google "UsingCoverStory") De toute façon, j'ai vérifié que ces paramètres sont assignés correctement. J'ai mis ma config à Debug et je cours cela sur un périphérique 3.1.3. Lorsque je lance l'application, elle ne montre rien de spécial dans le débogueur jusqu'à ce que je quitte l'application. À ce moment-là, je reçois une erreur:

profiling:/Users:Cannot create directory 
profiling:/Users/forbushbl/Documents/TestApp/build/TestApp.build/Debug-iphoneos/TestApp copy.build/Objects-normal/armv6/ApplicationController.gcda:Skip 

Je suppose que GCOV tente d'écrire les fichiers .gcda mais je ne suis pas tout à fait sûr comment dire où ils doivent être écrits. J'ai lu quelque part que GCOV essaie de reproduire la structure de répertoire où les fichiers .gcno sont stockés dans mon dossier de projet ce qui serait logique car le répertoire ci-dessus est où les fichiers .gcno se trouvent sur ma machine. Cependant, ceci est un problème car cette structure n'existe pas sur l'iPhone et l'appareil ne peut pas créer cette structure.

J'ai trouvé une autre personne avec le même problème et ils ont dit qu'ils devaient définir une variable d'environnement. How to set up gcov for code coverage analysis in iPhone SDK?

La documentation GCOV dit le texte suivant:

For example, if the object file /user/build/foo.o was built with -fprofile-arcs , the final executable will try to create the data file /user/build/foo.gcda when running on the target system. This will fail if the corresponding directory does not exist and it is unable to create it. This can be overcome by, for example, setting the environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'. Such a setting will name the data file /target/run/build/foo.gcda .

Ma question est, comment puis-je configurer ces variables d'environnement sur l'iPhone? Devrais-je le faire dans ma configuration de construction ou dans le code actuel?

+0

Plus de détails sur les variables d'environnement et comment les utiliser dans un contexte générique (pas iPhone): [Déplacement de fichiers de données pour prendre en charge le profil croisé] (http://gcc.gnu.org/onlinedocs/gcc/Cross_002dprofiling.html#Cross_002dprofiling) –

Répondre

0

Vous devriez être en mesure de définir ces variables dans vos paramètres exécutables. Ouvrez la branche "executables" de votre projet (dans la vue arborescence/divulgation) puis double-cliquez sur votre exécutable. Sous le volet arguments, vous pouvez définir des variables d'environnement.

0

Vous devez définir ces variables en utilisant setenv dans le fichier main.m de votre projet:

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. 

Remarque: Assurez-vous que le code ci-dessus est avant:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, nil); 
[pool release];  
return retVal;