0.笨办法html
看变量、对象?NSLog+从新编译运行;
改某对象?改源码+从新编译运行;
隔离某个方法?在方法中写 return 跳出+从新编译运行;ios
慢!!!git
改源码+从新编译的方式要等待时间太长,而且看起来特别不高端。试试程序员最喜欢的命令行模式——LLDB。程序员
print\p\po 打印对象github
高级一点:十六进制p/x 16,二进制p/t 16 完整格式清单express
po [[UIWindow keyWindow] recursiveDescription] 来检查层次结构,以文本形式打印出完整的视图层次结构
po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 来检查视图控制器xcode
expression\e 更改变量值app
开头
thread return,能够隔离函数,伪造返回值,若非开头用这个语句,可能形成内存泄露。注意
1)在 LLDB 中使用变量要加$符号
p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
2)惟一的缺点就是不能建立新函数... 这意味着不能建立新的类,block,函数,有虚拟函数的 C++ 类等等。框架
【经常使用命令】
1)为了调试 viewiview
2)为了看结构
pinternals: 打印某个对象的内部结构和数据
pca: 打印 layer tree
presponder: 打印从某个对象开始的响应链
ptv :打印最高层级的 tableview
3)查找
4)刷新
【待挖掘的命令】
查看帮助 (lldb) help
查看某语句帮助 (lldb) help border
1)控制台中的 step into\step over\step out按钮
2)xcode-symbolic breakpoint
设置条件、函数和 action(断点行为,每次断点到此处时运行的命令)
3)exception breakpoint
反编译:http://www.hopperapp.com/
Runtime:Aspects:http://github.com/steipete/Aspects
DTrace 框架:苹果新发布的活动追踪 API
步骤:
复现问题-断点+lldb+method swizzling 缩小范围(探查手段,包括 Instruments)-分析如何发生-解决方案
向苹果反馈 bug: http://www.quickradar.com/
与调试器共舞 - LLDB 的华尔兹
1.一篇很赞的ios视图bug调试案例,技术和方法都值得借鉴~http://www.cocoachina.com/ios/20150330/11435.html
2.ios ui调试 http://www.cocoachina.com/ios/20141224/10748.html
3.ios中的crash日志捕获原理及实现详解http://www.cnblogs.com/alario/archive/2012/03/28/2421574.html
4.ios应用崩溃日志分析http://www.cocoachina.com/applenews/devnews/2013/0725/6677.html
5.高级技巧:【iOS/Mac OS】程序崩在objc_msgSend(),怎么办?http://blog.csdn.net/horkychen/article/details/8015109