标签:
LLDB,底层调试器,在xcode的Debug区域,能看到蓝色的小字 (lldb)
dsYM是调试信息文件,因为后缀名.dsYM,所以叫sdYM文件,创建新工程时,默认就会创建dsYM文件,Build Setting里有相应的设置
程序运行时,是将源代码转成机器码运行的,程序一旦崩溃,所能收集到的崩溃信息,无非是一些内存地址,十六进制码,必须转成方法名或变量名,才能看懂崩溃信息,这个转换的过程称为符号化,符号化依据dsYM文件,因为dsYM文件中,存储着内存地址和方法名之间的映射。
http://www.cocoachina.com/industry/20140514/8418.html
和添加异常断点同一按钮,选Symbolic Breakpoint,符号断点,通常用来关注你想关注的方法(感觉比较鸡肋)
开发创建的任何断点,都可以编辑,进入编辑界面,可以在condition中编辑条件。比如一个100次的循环,需要在执行第50次时,打上断点,可以在condition中写上index>50 (不一定是index,由for循环中条件变量决定),这个比较有用
在xcode的左侧导航栏,切换至断点导航栏界面,按住crtl点击某一断点,可以选share,可以将断点上传到版本控制系统中,这个很鸡肋
程序运行时,可以在debug区域的左部分,选中某个变量,按住ctrl,点击某一变量,再点击watch,一旦这个变量的值发送变化,会自动在控制台中打印old值和new值,并且观察点会自动被添加到断点导航中,这个比较有用,用来监控全局变量或单例的属性值
当用断点跟踪问题时,如果忘记NSLog了,可以用p或po打印,p打印非容器变量,po打印容器变量,例如字典、数组、集合的。
recursiveDescription是没有自动补全的,敲回车就能看到打印效果,例如 [self.tableView recursiveDescription]
register read,程序一旦崩溃,可以看看打印寄存器,列出的方法,缩小排查范围。
ARC下,貌似没什么太大用处了。不过MRC下,这个用处挺大
在访问一个已经释放的对象或向它发消息时,就会出现
段错误信号,是操作系统产生的一个更严重的错误。可能原因有 硬件出现错误,访问不可读的内存地址,或向受保护的内存地址写入数据。
访问的内存是一个无效的内存地址
遇到这种错误时,通常LLDB会自动在相应行代码上暂停
除0时,会出现
非法指令信号
中止信号
错误码0x8badf00d,常读作ate Bad Food(很像),常见于在同步队列中发请求,阻塞主线程
可以看看UncaughtExceptionhandler开源类
建议在发布版本中删除断言,并用其他方式将断言记录在日志系统中。
断言最好总是和if条件匹配
int i = 4;
if (i == 4){
// do something
} else {
NSAssert(NO,@"i 不等于4");
}
标签:
原文地址:http://www.cnblogs.com/oumygade/p/4528876.html