Iphone Xcode中的条件环境变量
我想在Xcode中创建一些环境变量以进行大量调试,例如:Iphone Xcode中的条件环境变量,iphone,xcode,debugging,ios,Iphone,Xcode,Debugging,Ios,我想在Xcode中创建一些环境变量以进行大量调试,例如: NSDebugEnabled NSZombieEnabled MallocStackLogging MallocStackLoggingNoCompact 是否可以创建一个新的构建配置,它是“Debug”的副本,其中那些环境变量被设置为YES,但我可以切换到常规Debug,而那些将再次关闭 IIRC,环境变量是在“可执行文件”中设置的,而不是在配置/目标中设置的(如果我错了,请忽略此rant)。您可能可以使用Xcode变
NSDebugEnabled
NSZombieEnabled
MallocStackLogging
MallocStackLoggingNoCompact
是否可以创建一个新的构建配置,它是“Debug”的副本,其中那些环境变量被设置为YES,但我可以切换到常规Debug,而那些将再次关闭
IIRC,环境变量是在“可执行文件”中设置的,而不是在配置/目标中设置的(如果我错了,请忽略此rant)。您可能可以使用Xcode变量替换:
- 创建名为“NSDebugEnabled”的布尔生成设置。将NSDebugEnabled环境变量设置为$(NSDebugEnabled)。(它可能必须是一个值为YES的字符串;我不确定NS环境变量有多挑剔。)
- 创建名为“NSDebugEnabled”的字符串生成设置。将其设置为“NSDebugEnabled”以启用,将其设置为其他内容(空字符串?)以禁用。使用$(NSDebugEnable)作为环境变量名,使用“YES”作为值
#包括
内部主(内部argc、字符**argv、字符**envp)
{
#ifdef调试环境
如果(!getenv(“NSDebugEnabled”))
{
setenv(“NSDebugEnabled”,“1”,1);
…设置其他变量。。。
//也许这会抱怨自动释放池。
char*executablePath=[[[NSBundle mainBundle]executablePath]filesystemRepresentation];
execve(executablePath,argv,environ);abort();
}
#恩迪夫
…执行您在main()中通常执行的操作。。。
}
我很确定设备上的沙盒禁止execve()系统调用
如果这些都太多了,我会这么做: 向可执行文件添加一些环境变量。取消选中复选框。需要调试时,选中复选框。调试完成后,取消选中它们。在提交之前,请检查您在.xcodeproj中没有提交任何愚蠢的内容 我认为如果使用泄漏,就不需要MallocStackLogging(泄漏应该自动设置)
<>你也可以考虑MallocPreScribble和MalLogScript。< / P>嗨,我喜欢最后的选择。你是对的,上面提到的太多了,在脑力杂耍方面要简单得多,只需取消选中这些框。
#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() ...
}