(转)5个Xcode开发调试技巧
1.Enable NSZombie Objects(开启僵尸对象)
Enable NSZombie Objects可能是整个Xcode开发环境中最有用的调试技巧。这个技巧非常非常容易追踪到重复释放的问题。该技巧会以非常简洁的方式打印指出重复释放的类和该类的内存地址。
怎么开启僵尸对象呢?首先打开“Edit Scheme”(或者通过热键⌘<),然后选择Diagnostics选项卡,勾选Enable NSZombie Objects选项。
现在我们可以关掉ARC来测试重复释放的问题、异常和更容易产生的Crashs,但是即使开启ARC,重复释放和与内存相关的Crashs也经常发生。现在假设我们犯了一些错误导致了重复释放的发生来观察将要发生什么。
- UIView* view = [[[UIView alloc] init] autorelease];
- //...
- //do something with view...clearly forgetting that it has been autoreleased.
- //
- [view release];
现在运行这段代码会发生重复释放的问题,程序将崩溃在主函数,会像下面这样:
Enable NSZombie Objects会让调试器看起来像这样:
这个例子看起来作用非常小,但是对于一个大工程通过Enable NSZombie Objects打印的信息是非常有用的。
2.对于所有异常添加Global BreakPoint(全局断点)
当你的应用异常或者崩溃的时候Xcode喜欢做的一件事情是直接跳到主函数,就像第一个调试技巧中用到的那个例子一样。如果异常或者崩溃能够停留在异常或者崩溃发生的地方那该是多好呀。幸运的是有一个方法可以做到。Xcode有一个漂亮的功能叫做异常断点,允许我们在异常发生的时候在异常发生的地方放一个断点。你可以指定具体的异常也可以指定所有的异常。
怎样开启异常断点呢?工程切换到异常浏览窗口,点击下方左侧的“Add Breakpoint”按钮,然后选择“Add Exception Breakpoint”确保可以捕获所有异常。
现在异常发生时调试器不会直接跳转到主函数了,而是停留在了异常发生的地方。
这个断点给了我们一个调试异常非常好的开始的点,不用我们再去遍历代买去找异常发生的地方了。
3.Static Analyzer(静态分析)
Static Analyzer是一个非常好的工具去发现编译器警告不会提示的问题和一些个人的内错泄露和死存储(不会用到的赋了值的变量)错误。这个方法可能大大的提高内存使用和性能,以及提升应用的整体稳定性和代码质量。
怎么打开Static Analyzer?打开Xcide的“Product”菜单,选择Analyzer选项(或者使用热键⌘ shift B)。正像你看到的下面的截图,Static Analyzer会捕获任何应用内的可能的问题然后以蓝色的警告展示出来。
我们也可以设置我们的应用在我们编译应用的时候自动开启Static Analyzer,打开项目project文件,设置“Run Static Analyzer”为YES,如下图:
4.Condational Breakpoints(条件断点)
最后一个调试技巧条件断点,这只是普通的断点,当变量满足一定条件时程序停止。这个调试技巧在当你想要捕获一个循环中的变量的特定值或者一些不常发生的情况时是非常有用的,而不用你每次迭代都停止来查看。
怎样开启条件变量?只不过是添加一个普通断点,然后右键点击断点选择“Edit Breakpoint”,这时就打开了一个断点编辑器,你可以在这里设置断点条件(以及一些其他的断点设置),然后选择“Done”,这个调试技巧非常简单吧。
5.unrecognized selector send to instancd 快速定位
在Debug菜单中Breakpoints->Create Symbolic Breakpoint

在Symbolic中填写如下方法签名
- -[NSObject(NSObject) doesNotRecognizeSelector:]

设置完成后再遇到类似的错误就会定位到具体的代码。
(转)5个Xcode开发调试技巧的更多相关文章
- 5个Xcode开发调试技巧
转自Joywii的博客,原文:Four Tips for Debugging in XCode Like a Bro 1.Enable NSZombie Objects(开启僵尸对象) Enab ...
- iOS 5个Xcode开发调试技巧
转自Joywii的博客,原文:Four Tips for Debugging in XCode Like a Bro 1.Enable NSZombie Objects(开启僵尸对象) Enab ...
- Xcode 常用调试技巧总结
NSLog,po命令和普通断点调试相信每个iOS开发者都会,这里就不作介绍了. 一.Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 有很多叹号说明就有问题了. ...
- 10个Visual Studio原生开发调试技巧
10个Visual Studio原生开发调试技巧(1) 2013-05-29 13:30 佚名 开源中国 我要评论(1) 字号:T | T 以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来 ...
- Linux c c++ 开发调试技巧
看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Doc ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- xcode的调试技巧
转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言逼优鸡知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global ...
- iOS 开发调试技巧
对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...
- iOS开发调试技巧总结(持续更新中)
作者:乞力马扎罗的雪 原文 对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不 ...
随机推荐
- AttributeError: module 'shutil' has no attribute 'copyfileobj'
import shutil #1.copyfileobj(源文件,目标文件) 将文件内容复制到另一个文件 shutil.copyfileobj(open('config.log','r'),open( ...
- C++ Sort类成员的传递
C++模板中提供了sort方法,一般有两种方法:传递函数,传递一个对象. 第一种方法:函数 bool compare(const string &strLeft, const string & ...
- Semi-prime H-numbers
题目描述形如4n+1的数被称为“H数”,乘法在“H数”集合内为封闭的.因数只有1和本身的数叫“H素数”(不包括1),其余叫“H合数”.一个“H合成数”能且只能分解为两个“H素数”.求0·h内的“H合成 ...
- Asp.net开发必备51种代码
1.//弹出对话框.点击转向指定页面 Response.Write("<script>window.alert('该会员没有提交申请,请重新提交!')</script> ...
- java面试题(基础部分)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- 【转】HashMap,ArrayMap,SparseArray源码分析及性能对比
HashMap,ArrayMap,SparseArray源码分析及性能对比 jjlanbupt 关注 2016.06.03 20:19* 字数 2165 阅读 7967评论 13喜欢 43 Array ...
- CF1025C Plasticine zebra
思路: 不要被骗了,这个操作实际上tm是在循环移位. 实现: #include <bits/stdc++.h> using namespace std; int main() { stri ...
- COGS 36. 求和问题
时间限制:1.2 s 内存限制:128 MB [问题描述] 在一个长度为n的整数数列中取出连续的若干个数,并求它们的和. [输入格式] 输入由若干行组成,第一行有一个整数n ...
- C++遍历文件及文件夹代码
可以遍历目录包含的文件及文件夹 #include <string> #include <vector> #include <io.h> using std::vec ...
- UIButton 左对齐 省略号最右边
//左对齐 [_btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft]; //省略号靠右侧 _btn.ti ...