一、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
AI“越狱”实锤:OpenAI与Anthropic模型在
AI动态
269人已阅读
3
SuperCom:超级串口调试工具来了!
软件精选
615人已阅读
4
NVIDIA首款Windows PC处理器首个跑分出炉!
业界
2005人已阅读
5
你敢信吗?点一个网址,你的安卓手机就能被
网安动态
834人已阅读
6
19岁黑客跨三国换IP狂奔,还是被Windows一
网安动态
841人已阅读
社区热门
1
━※☆※━★===二〇二六年论坛每日签到帖=
2026-03-13
2
十几年没回来了,回来看看。顺便做个记号
2026-08-15
3
多年以后我又回来了,报道贴
2026-08-11
4
人工智能最终是否替代人类??人类该何去何
2026-07-22
|