IIRC, переменные окружения задаются в "исполняемом файле", а не в конфигурации / цели (игнорируйте эту напыщенную речь, если я ошибаюсь).Возможно, вы сможете использовать подстановку переменных XCode:
- Создайте параметр логической сборки под названием "NSDebugEnabled".Задайте для переменной среды NSDebugEnabled значение $ (NSDebugEnabled).(Это может быть строка со значением YES; я не уверен, насколько разборчивы переменные среды NS.)
- Создайте параметр построения строки с именем "NSDebugEnabled".Установите его в «NSDebugEnabled» для включения и что-то еще (пустую строку?) Для отключения.Используйте $ (NSDebugEnable) в качестве имени переменной среды и «YES» в качестве значения.
Если подстановка переменной не работает, вы могли бы быть в состоянии вызвать setenv ()/ putenv () в самом начале функции main () (до выделения пула автоматического выпуска) для изменения среды перед считыванием переменных;Успешно ли это зависит от того, когда они прочитаны.IIRC malloc () читает их в первый раз, когда вы вызываете malloc () (это может быть очень рано из-за методов выполнения Obj-C / + load).Я не уверен, когда будут прочитаны NS *.
Если это все еще не работает, и вы счастливы работать в симуляторе , я думаю вы можете использовать execve ():
#include <unistd.h>
int main (int argc, char ** argv, char ** envp)
{
#ifdef DEBUGENVIRON
if (!getenv("NSDebugEnabled"))
{
setenv("NSDebugEnabled","1",1);
... set the other variables ...
// Maybe this will complain about an autorelease pool.
char * executablePath = [[[NSBundle mainBundle] executablePath] filesystemRepresentation];
execve(executablePath, argv, environ); abort();
}
#endif
... do what you normally do in main() ...
}
Я почти уверен, что системный вызов execve () запрещен песочницей на устройстве.
Если это слишком много,вот что я делаю:
Добавьте некоторые переменные окружения в исполняемый файл.Снимите флажок.Когда требуется отладка, установите флажки.Когда отладка закончена, снимите их.Перед фиксацией убедитесь, что вы не делаете ничего глупого в .xcodeproj.
Я не думаю, что вам нужен MallocStackLogging, если вы используете Leaks (Leaks должен установить его автоматически).
Youможет также рассмотреть MallocPreScribble и MallocScribble.