XCode4 的调试定位技巧, 使用Xcode 4编译器设定Release/Debug教程

来源:互联网 发布:学生情侣项链知乎 编辑:程序博客网 时间:2024/04/28 22:57

XCode4 的调试定位技巧

 

论坛里经常有朋友会问Crash的问题。Crash最多的无非就两种,一种就是signal SIGABRT,大概的意思就是发送Message出现问题,信号迷失了。

这种的Crash其实是很好定位,Crash了后直接看Console里出的最后日志,比如这段:

2012-03-28 19:26:33.055 TableViewMenuDemo[3916:f803] *** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x6a3f3d0′

*** First throw call stack:

找到reason字段,那就是原因,说NSArray 调用 replaceObjectAtIndex:withObject:

这个方法是NSMutableArry的,NSArray并没有该方法。信号迷失掉了,所以Crash了。0x6a3f3d0 是出问题的内存地址,查下内存地址或搜下调用方法就比较好定位了。

Xcode4上还有个更好用的定位方法,就是设置一个Exception Breakpoint就好了

看图在工程的左边栏中选择Breakpoint Navigator ,点击下面的+号添加一个Exception Breakpoint,然后再运行试试,Crash后,是不是直接定位到了那行代码了?再根据Console里的日志进行定位修改就好了。

下面说说另一种Crash,EXC_BAD_ACCESS ,这个比较头疼,因为Crash的时候,可能是比较早之前的某个变量释放了,现在访问时出问题。Console里也没显示什么日志。

这里光加入Exception Breakpoint是不够的了,XCode4还个可爱的地方,打开Scheme选项选择Edit  Scheme

然后按图勾上Enable Zombie Objects 和Malloc Stack那两项,记住一般只有在定位EXC_BAD_ACCESS时候才勾选,别有事没事都勾上。

这样重新跑一下,如果是到Exception Breakpoint处停止了,可以在Console中输入:c(continue)按回车继续跑,直到Crash。看下Console是不是有跟SIGABRT类似的错误信息日志了,后面定位什么的你懂的。

如果还没有日志,在Console中输入 po $eax   $eax标志出错的地方,适用模拟器,真机用$r0(话说EXC_BAD_ACCESS这种错误模拟器定位就行),还可以输入比如:po [$eax name]     po [$eax reason]等指令查看错误其他信息(注意方括号后没分号的)。然后,就没有然后了。

还要补充点,程序开发过程就要多关注左边栏中Issue Navigator里的警告信息,Xcode4不仅会警告,还多数给出解决建议。能避免后面不必要的Crash

如果程序Crash,第一时间关注下debug Navigator里的执行信息,将滑块拉向右边可以看到更多调用信息,根据这个能大致设想是调用什么方法或进行什么操作时Crash的。

好了,大致这些就能比较有效率的解决一般Crash问题。欢迎大家有独到的经验可以补充进来。

 

//=============================================================================================================================

iPhone-NSAssert使用 
调试cocoa程序在程序出错时,不会马上停止。使用宏NSAssert可以让程序出错时马上抛出异常。
在debug情况下,所有NSAssert都会被执行。在release下不希望NSAssert被执行,我们通常在release种将断言设置成禁用。
设置方法:在targets种选择build,选择release。在gcc preprocessing下增加Preprocessor Macros 值为 NS_BLOCK_ASSERTIONS.
C语言调试用NSCAssert.

 

//=============================================================================================================================

 使用Xcode 4编译器设定Release/Debug教程

使用Xcode4编译器设定Release/Debug教程是本文要介绍的你内容,主要是来学习xcode 4的相关内容,让我们更一步的去熟悉、了解xcode 4,内容不多,不过真的可以帮助友们去解决xcode 4中编译器的问题。先来看内容。

进入Xcode 4,选择菜单“Product”->“Manage Schemes”,出现下图:

使用Xcode 4编译器设定Release/Debug教程

选择一个项目,点击“Edit”,如图:

使用Xcode 4编译器设定Release/Debug教程

Bulid Configuration

在调试中,如果需要传入参数,在上图中Arguments上设置。

一般这个设置常用于控制台程序,比如:A.exe -p boy

那么,在Arguments上添加-p boy

说明下,在XCode上,可以这么设定,如图所示:

使用Xcode 4编译器设定Release/Debug教程

也可以这样,如图所示:

使用Xcode 4编译器设定Release/Debug教程

当然,个人建议使用后一种

另外:追加编译宏:选择项目,找到“Bulid Setting”,下面有一项:Preprocessor Macros。

小结:使用Xcode4编译器设定Release/Debug教程的内容介绍完了,希望本文对你有所帮助!

 

 

 

原创粉丝点击