IIRC, переменные окружения установлены в «исполняемый», а не конфигурации/цели (игнорировать эту тираду, если я ошибаюсь). Возможно, вы сможете использовать замену переменной Xcode:
- Создайте булевскую конструкцию, называемую «NSDebugEnabled». Установите переменную среды NSDebugEnabled в значение $ (NSDebugEnabled). (Возможно, это должна быть строка со значением ДА, я не уверен, насколько придирчивы переменные среды NS.)
- Создайте параметр строковой сборки, называемый «NSDebugEnabled». Установите его в «NSDebugEnabled», чтобы включить и что-то еще (пустая строка?), Чтобы отключить. Используйте значение $ (NSDebugEnable) в качестве имени переменной среды и «YES» в качестве значения.
Если переменная замена не работает, вы может быть в состоянии назвать SETENV()/PutEnv() в самом начале основной() (перед выделением в autorelease пул), чтобы изменить окружающую среду до того, как переменные читаются; будет ли это успешным, зависит от того, когда они будут прочитаны. IIRC malloc() читает их при первом вызове malloc() (это может быть очень рано из-за методов времени выполнения/+ загрузки Obj-C). Я не уверен, когда читаются 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, если вы используете утечки (утечки должны установить его автоматически).
Вы также можете рассмотреть MallocPreScribble и MallocScribble.
Привет, мне нравится последний вариант. Вы правы выше, это слишком много, это намного проще с точки зрения умственного манипулирования, чтобы просто снять эти поля. – Onedayitwillmake