一、Xcode调试技巧之:NSLog 上面也提到了,在我们日常的开发过程中最常见的Debug方式就是打Log。而在OC语言中,打Log是采用NSLog方法。但是NSLog效率低下,具体原因可以看这篇博客(《NSLog效率低下的原因及尝试lldb断点打印Log》)。所以在平时的开发过程中,能不打Log就不打Log。实在想打Log网上也有对NSLog的一些优化方法,可以阅读王巍的《宏定义的黑魔法 - 宏菜鸟起飞手册》如下代码便出自其中:
另外在使用NSLog的时候应当注意,release版本中应该要去掉NSLog。 二、Xcode调试技巧之:LLDB 1、po:print object的缩写,表示显示对象的文本描述,如果对象不存在则打印nil。 简单的打印一个对象我们就不说了,我们来说说特殊的应用场景吧! 应用场景:你想知道一个视图包含了哪些子视图。当然你可以循环打印子视图,但是下面只需要一个命令即可解决。 输出视图层级关系(这是一个被隐藏的命令):po [[self view] recursiveDescription] 还有个常见的调试场景,比如你要打印一个model。你直接用NSLog或po对象处理的结果是model的地址,这并不是我们想要的。怎么办?有没有解决方法呢? 答案是有的。你可以重写model里面的description方法。但是,如果model里属性非常多,这样就不适用了。你不可能说在description方法里面拼接属性返回。这样不仅麻烦,而且可读性非常差。到这里,我们可以利用runtime动态获取属性并返回。不过我并不建议你重写description方法,我推荐你重写debugDescription方法(至于详细的介绍以及如何重写请点击此处),因为debugDescription方法和description方法效果一样,区别在于debugDescription方法是在你使用po命令时调用的,实际上也是调用了description方法。 2、p:可以用来打印基本数据类型。 3、call:执行一段代码
4、expr:动态执行指定表达式 expr i = 101 输出:(int)$0 = 101 5、bt:打印当前线程堆栈信息 如果要打印所以线程堆栈信息,使用:bt all即可。 6、image:常用来寻找栈地址对应代码位置: 举个栗子: 应用场景(数组越界)模拟代码:
错误信息如下:
上一篇:iOS项目分析及优化下一篇:iPhone QQ 6.5.9 正式版发布
最新评论
72小时资讯榜
2
乐鑫重磅开源 ESP-Claw:把 Agent 塞进了 E
AI动态
227人已阅读
3
Desk Tidy Sticky: 开源免费、Windows 和 M
软件精选
232人已阅读
4
LibreTranslate - 纯本地翻译神器,支持49
软件学院
246人已阅读
5
Python逆天改命,开源Hermes首次击败OpenAI
AI动态
219人已阅读
6
开源项目介绍:工具 Pentest Agent Suite
渗透测试
206人已阅读
社区热门
1
━※☆※━★===二〇二六年论坛每日签到帖=
2026-03-13
3
从上大学一直玩黑基 到现在已经37岁 感谢黑
2025-06-03
5
好久没来这里了,居然能正常登录,佩服站长
2025-05-19
6
好多年没来竟然还可以登录
2025-09-22
|