Как настроить переменные среды для gcov на iPhone - PullRequest
2 голосов
/ 16 июня 2010

Я преодолел все проблемы с настройкой gcov в своем проекте iPhone, но теперь я получаю следующее:

profiling:/Users:Cannot create directory

Есть ли у кого-нибудь какие-либо предложения относительно того, что я могу делать неправильно?

Первоначально я настроил gcov, следуя инструкциям Google, которые можно найти с помощью Googling "UsingCoverStory"

UPDATE: Хорошо, позвольте мне уточнить, что я пытаюсь сделать. У меня есть приложение для iPhone, которое я пытаюсь проверить автоматически. Я использую UISpec Framework для управления графическим интерфейсом. Что мне действительно нужно знать, так это то, сколько кода я на самом деле покрываю своими тестами Я думаю, что я действительно близок, но мне просто нужно понять, как правильно установить переменные окружения / компилятора, чтобы соответствовать моему проекту.

Вот краткое изложение того, что я сделал до сих пор. Сначала я скопировал свою цель сборки, указал флаг компоновщика и несколько других параметров, как это предписано. (Это можно сделать автоматически с помощью AppleScript, созданного Google. Инструкции и загрузить их можно найти в Googling «UsingCoverStory»). В любом случае, я убедился, что эти настройки назначаются правильно. Я установил свою конфигурацию на Debug, и я запускаю это на устройстве 3.1.3. Когда я запускаю приложение, оно не показывает ничего особенного в отладчике, пока я не выйду из приложения. В этот момент я получаю сообщение об ошибке:

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

Я предполагаю, что GCOV пытается записать файлы .gcda, но я не совсем уверен, как сказать ему, где они должны быть записаны. Я где-то читал, что GCOV пытается воспроизвести структуру каталогов, в которой файлы .gcno хранятся в папке моего проекта, что имеет смысл, так как каталог выше находится там, где файлы .gcno находятся на моем компьютере. Однако это проблема, потому что эта структура не существует на iPhone, и устройство не может создать эту структуру.

Я нашел другого человека с такой же проблемой, и он сказал, что ему нужно установить переменную среды. Как настроить gcov для анализа покрытия кода в iPhone SDK?

Документация GCOV гласит следующее:

Например, если объектный файл /user/build/foo.o был создан с -fprofile-arcs, конечный исполняемый файл попытается создать файл данных /user/build/foo.gcda при работе в целевой системе. Это не удастся если соответствующий каталог не существует и он не может создать это. Это можно преодолеть, например, установив окружение как `GCOV_PREFIX = / target / run 'и` GCOV_PREFIX_STRIP = 1'. Такая настройка будет называть файл данных /target/run/build/foo.gcda.

У меня вопрос, как мне установить эти переменные среды на iPhone? Должен ли я делать это в конфигурации моей сборки или в реальном коде?

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Вы должны установить эти переменные, используя setenv в файле main.m вашего проекта:

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. 

Примечание: убедитесь, что код выше:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];    
return retVal;
0 голосов
/ 19 июня 2010

Вы должны быть в состоянии установить эти переменные в ваших исполняемых настройках.Откройте ветку «исполняемые файлы» вашего проекта (в виде дерева / раскрытия), а затем дважды щелкните свой исполняемый файл.В области аргументов вы можете установить переменные окружения.

...