Xcode 调试之方法大全
2016-03-25 12:44
375 查看
1. Enable NSZombie Objects (开启僵尸对象)。
这个技巧主要用来追终重复释放的问题。个人认为,ARC推出以来。项目的基本是基于ARC环境。不用开发者主动去调用release去释放对象,所以不用太在意这个方法。这里就不多做介绍了。想了解该方法的同学请 坐飞机
2. 断点调试(全局断点、条件断点)
一、全局断点:
这两行代码,没有添加全局断点时,运行crash,直接就跳到了mian函数,如下图:
接下来添加全局断点,方法如下图:
添加之后运行,奔溃后,程序停留在了crash那行代码。
是不是很方便,很省事。哈哈!(ps 不过有的crash,这种方式定位不到)
二、条件断点:设置断点触发的条件,方便开发者对特定情况进行调试
如下图:
在for循环中添加一个断点。右击断点选择”Edit BreakPoint”,然后设置断点触发条件。
这个例子当 “i==5”时,断点触发,如下图:
3. Static Analyzer (静态分析)
Static Analyzer主要用于分析内存,避免内存泄漏。主要对以下情况进行分析。
未使用的实例变量、未初始化的实例变量、类型不兼容、无法达到的路径、引用空指针
使用:command + shift +B,如下图就能轻松找到可能内存泄漏的代码,然后我们根据代码环境进行修复就可以了(ps:有的内存泄漏可能检测不出来,还是需要我们在写代码时对内存这块多留点心。)
4. LLDB调试器
这个方法是我今天主推的方法。比较高级,也更加灵活、方便。
随着Xcode5,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。其实Xcode已经帮我们完成了大部分工作,而且很多东西也可以在Xcode中直接看到。所以这里我们只列举常用的命令。
打印:p,print的缩写:该命令如果打印的是简单类型则会列出简单类型的的类型和值,如果是对象会打印出对象的地址。
po,print Object 的缩写,用于输出OC对象
如下如,当运行到断点处时,控制台就会出现LLDB的调试命令行。我们只需在这里进行调试。
expr:expression的缩写,可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。
如上图,你在控制台输入
你就能看到
这是a的值就被动态改成了2
除此之外,还可以使用这个命令生成一个新的对象,如:
image: image命令可用于寻址,有多个组合命令,在控制台输入
这个技巧主要用来追终重复释放的问题。个人认为,ARC推出以来。项目的基本是基于ARC环境。不用开发者主动去调用release去释放对象,所以不用太在意这个方法。这里就不多做介绍了。想了解该方法的同学请 坐飞机
2. 断点调试(全局断点、条件断点)
一、全局断点:
<code class="hljs mel has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">NSArray <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*aa</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@[</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@2</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@4</span>]; NSLog(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%@</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",aa[3]);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
这两行代码,没有添加全局断点时,运行crash,直接就跳到了mian函数,如下图:
接下来添加全局断点,方法如下图:
添加之后运行,奔溃后,程序停留在了crash那行代码。
是不是很方便,很省事。哈哈!(ps 不过有的crash,这种方式定位不到)
二、条件断点:设置断点触发的条件,方便开发者对特定情况进行调试
如下图:
在for循环中添加一个断点。右击断点选择”Edit BreakPoint”,然后设置断点触发条件。
这个例子当 “i==5”时,断点触发,如下图:
3. Static Analyzer (静态分析)
Static Analyzer主要用于分析内存,避免内存泄漏。主要对以下情况进行分析。
未使用的实例变量、未初始化的实例变量、类型不兼容、无法达到的路径、引用空指针
使用:command + shift +B,如下图就能轻松找到可能内存泄漏的代码,然后我们根据代码环境进行修复就可以了(ps:有的内存泄漏可能检测不出来,还是需要我们在写代码时对内存这块多留点心。)
4. LLDB调试器
这个方法是我今天主推的方法。比较高级,也更加灵活、方便。
随着Xcode5,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。其实Xcode已经帮我们完成了大部分工作,而且很多东西也可以在Xcode中直接看到。所以这里我们只列举常用的命令。
打印:p,print的缩写:该命令如果打印的是简单类型则会列出简单类型的的类型和值,如果是对象会打印出对象的地址。
po,print Object 的缩写,用于输出OC对象
如下如,当运行到断点处时,控制台就会出现LLDB的调试命令行。我们只需在这里进行调试。
expr:expression的缩写,可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。
如上图,你在控制台输入
expr a=2
你就能看到
(NSInteger) $11 = 2
这是a的值就被动态改成了2
除此之外,还可以使用这个命令生成一个新的对象,如:
expr int $b = 0
p $b这条命令用于输出新申明对象的值(注意要加$)
image: image命令可用于寻址,有多个组合命令,在控制台输入
help image可查看image的用法。
相关文章推荐
- 《目送》读后感
- VK Cup 2016 - Qualification Round 2 B. Making Genome in Berland 水题
- centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本
- centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本
- RGBD物体识别(4)--使用opencv3读取kinect数据
- java中最小生成树的实现
- maven 笔记
- 詩經神學國際論文1:日能習財武經
- C++作业2
- 移动联通电信运营商手机号段分配
- leetcode 234: Palindrome Linked List
- JQuery判断页面是否按下了Enter键
- Win7下使用Telnet命令
- Unity发布时出现“The type or namespace name `UnityEditor' could not be found.” 错误
- SQL语句中 and or执行优先级
- hdu 1241 Oil Deposits (BFS)
- 图片压缩总结
- 关于Eclipse自动补全的问题
- Ubuntu 使用中遇到的小问题(持续更新)
- 【转】KVM/Installation