- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
iOS SDK:iOS调试技巧
为什么你的数组包含3个项目而不是5个?为什么你的游戏运行缓慢?这些都跟调试有关,调试是开发过程中必不可少的一部分。本文所列举了一些重要的调试功能(当然并不全面)可以帮你用更少的时间来解决bug问题。
?
本文内容主要包括3个方面:
使用console检查app状态
进行日志记录,并熟练的驾驭NSLog
使用对象的生命周期来跟踪内存的使用。
?
使用Console检查app状态
Xcode底部的小黑盒是我们调试时的好朋友,它可以输出日志信息、错误信息以及其他有用的东西来帮你跟踪错误,除了可以看到日志直接输出的信息外,我们编程过程中也可以在某些断点停留,来检查app的多个方面。
?
条件断点
我假定你知道Breakpoints是如何工作的(如果你不知道,呵呵,看完这个文章也许你就知道了!)
?
让程序在某个特定的时间点命中断点非常有价值,但要通过一个循环或者递归函数才能让对象等于某个确定的值,是一件令人痛苦的事情。这时候我们可以使用条件断点!
?
条件断点就是带有条件表达式的断点,只有满足这个条件,程序才会暂停。假想我们只想在对象处于特定状态的时候断点,或者在第N次迭代循环时命中断点。
?
点击Xcode editor的‘gutter’来添加断点,右键点击断点,然后选择“edit breakpoint”来设置特定条件。
?
条件断点只有在遇到特定情况时才会中断,你可以提供给一个条件(比如i == 12),或者断点应该忽略的次数。另外,你还可以添加能根据断点自动发生的动作,例如一个debugger command---打印一个值。
?
提示:添加/删除断点的键盘快捷键是command+\
?
另外一个重要的断点技巧是添加一个异常断点(exception breakpoint)。当遇到异常时, Xcode基本上都会自动转到main方法的autorelease pool中。
?
通过设置异常断点,你可以定位到引起异常断点的具体代码行。
?
如何添加异常断点?
?
1.打开异常断点tab(command+6);2.选择窗口左下角的”+”按钮;3.选择按钮并添加‘exception breakpoint’。
?
这样,当Xcode遇到异常情况时,将会在引起异常代码的地方发生断点。
?
?
从Console进行手动打印
理论上说,它会展示当前环境中所有值的状态;实际上,有时候会出现bug,并且不会列出值或者当你单步调试的时候不进行更新。
?
一般情况下,我们在app代码中添加特定断点,是为了通过Xcode提供的‘variables view’(该view在Xcode底部console旁边)来查看对象的状态 。理论上说,它可以显示出与当前上下文相关的所有值的状态。实际上,有时候会有点小问题,不会列出相关的值或者不会进行相关的更新。
?
不过,我们可以使用一些有用的console命令来检查特定的对象。在console中输入‘po’就可以获得某个断点的即时信息。(处理scalar值时,我们可以使用‘p’)
?
在我们查看一个已存在的对象时,这一点非常有用(如果对象不存在的话会打印出nil),确定对象的值,找出数组/字典运行时的信息,甚至是比较两个对象。因为这个指令打印出相关对象的内存地址,所以你可以打印你认为应该一样的两个对象,看看它们的内存地址是否相同。
另一个有用的,但是被隐藏的指令是recursiveDescription,你可以简单地用它对view进行检查。
在view中调用recursiveDescription来打印它的继承关系。
?
有效的Logging
有时,在调试程序的某个特定时间,我们希望将消息打印到控制台,此时‘NSLog’函数允许我们将任意输出打印至console。
?
此时可以使用NSLog函数,通过该函数可以将任意的输出打印到控制台。在不使用断点时,这个功能非常有用。NSLog遵从的格式与[NSString StringWithFormat]方法遵从的格式一样。(你可以从下边的截图中看到)
?
Tip: 这里可以看到苹果关于Objective-C中字符串格式化的信息:?String Programming Guide
?
NSLog
NSLog非常有用,我们需要聪明地实现它。从NSLog打印出的任何东西都会变成代码,任何人都可以看见。将设备连接到电脑,打开XCode中的organiser,就可以从console查看到每条日志信息,这会带来很大的影响。想一下,你想把一些保密的算法逻辑或者用户密码打印到console。正因为这个,如果苹果发现在production build中,有太多内容输出到console,那么你的应用可能会遭到苹果的拒绝。
?
?
幸运的是,这里有一个最简单的办法进行lo
您可能关注的文档
最近下载
- 某实验室装修工程投标文件—技术标.docx VIP
- Unit 6 A Day in the Life 单元检测(含答案) 人教版(2024)英语七年级上册.docx VIP
- B级法兰锻制-作业指导书生产用设备操作与维护规程汇编.doc VIP
- T_ZJAF 13.1-2023 公共视频资源 第1部分:总则.docx VIP
- 第四课 用联系的观点看问题(精品课件)-【中职专用】高二思想政治《哲学与人生》同步精品课堂(高教版2023·基础模块).pptx VIP
- 2025年高考政治真题试卷(新课标卷)+解析及答案001.docx VIP
- 2022年职业教育国家级教学成果奖申报书.pdf VIP
- 《吸入装置使用》课件.pptx VIP
- 患者隐私保护与信息安全培训.pptx VIP
- IT运维管理制度流程图.pdf VIP
文档评论(0)