LLDB调试器
基本的LLDB命令:
- p:打印非对象的值,如果是对象,则打印对象的地址
- po: 打印对象的描述
断点
Xcode 根据是否有断点,自动切换run模式和debug模式
(普通断点略)
- 全局断点
有时程序出错不能定位到某一行,而是直接跑到main循环或AppDelegate里面,提示EXEC_BAD_ACCESS:等,可在左边debug导航面板中点➕,选择全局断点 Add Exception Breakpoint,这样只要遇到错误,debug程序就会自动定位到栈底信息,也就是最先出错的代码那一行。 - 条件断点
- 基础:右击断点,选择编辑断点,即可在条件一览输入程序暂停的条件。比如:for循环(i=0; i<3; i++)中在断点条件一栏输入i ==2;这样只有遍历到i==2时断点才会被触发。
action一栏中可选择输入条件,功能太强大 - 升级:在添加全局断点处,选择添加Symbolic断点,在 Symbol 一栏输入 [ClassName viewDidLoad] (Objective-C) 或 ClassName.viewDidLoad (Swift) 即可(unrecognised selector sent to instance 0xaxxxx 这种错误,这个instance可以这样快速定位)
- 基础:右击断点,选择编辑断点,即可在条件一览输入程序暂停的条件。比如:for循环(i=0; i<3; i++)中在断点条件一栏输入i ==2;这样只有遍历到i==2时断点才会被触发。
打印
- NSLog打印其实比print效率低很多。
- 常不清楚NSLog(@“%?”,xxx) xxx这种类型该是什么什么类型输出时,可用 NSLog(@”%s”,NSStringFromCGPoint(<#CGPoint point#>))等
- 可用宏丰富打印内容
- 开启僵尸对象(Enable NSZombie Objects)
视图有关
- 编译并运行应用程序,选中模拟器,从 Debug菜单中选择Color Blended Layers选项