1.断点调试App
a.设置常规断点
添加断点:在xcode中代码编辑器中右边单击你想调试的代码处就可以添加断点,再次单击可以停用断点,添加断点后右键点击断点可以删除断点或者快捷键(command+\)。
b.编辑断点
条件断点在断点上按住ctrl再鼠标单击或者右键单击,可以弹出编辑断点菜单,在这里我们可以为断点设置特殊条件。
下面我们为这段代码添加断点并添加如下条件:
)
上面的意思就是只有当i==10的时候断点才会触发。还有一个地方是当我们勾选Automatically continue after evaluating actions
之后程序进入断点不会中断执行,只会执行我们的action,如果不勾选程序则会和普通断点一样,暂停程序,等待用户命令。
上面四个红色框中的按钮分别表示,1.继续执行 2.单步执行(依次执行下一行代码) 3.进入函数(当前代码是调用其他方法会进入到该方法) 4.跳出函数
蓝色标签点击后可以停用所有断点。
断点管理面板
在xcode左侧面板第7个tab下是断点管理面板(command+7),在这里可以管理整个项目中的断点。这里可以清空所有断点,或着停用某些断点。在这里点击断点右键可以看到又个share BreakPoint选项,选择该选项后该断点会出现在shared下方,这样这个断点会被分享给团队内的所有成员。
d.异常断点,符号断点(hold住全局异常,快速定位出错代码行)
在其他语言或者程序中当程序出现崩溃,一般来说调试器会告诉开发中那一行代码抛出了异常,但是在ios中会直接报错跳到程序入口main函数中return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
这让我们调试起来很痛苦,但是我们只需要在断点管理面板的下方添加全局断点handle所有Exception这样当有代码抛出异常崩溃的时候,xcode就会自动跳到相应代码行。
添加成功后就会处理所有的Exception
2.lldb调试器
LLDB 是一个有着REPL的特性和 C++ ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。http://lldb.llvm.org/lldb-gdb.html 这里是一份lldb命令清单,列出了lldb可用的命令。
c.打印对象(po)
使用po(print out)命令可用输出对象信息:
a.打印最基本的内容 (p)
使用p(print)可用输出对象并且为对象该对象会保存在lldb中的一个变量中需要注意的是修改了内存中的值需要执行下一步才会在程序中体现出来。最简单就是在lldb中再输入n。
e.lldb控制断点流程
在lldb中有几个简单的命令用来控制断点流程,方便调试无需点击xcode上的控制流程了。
上图上的控制按钮分别对应lldb中的c(continue),n(thread step-over,next),s(thread step in,step),finish(thread step-out)
就是c,n,s,finish。
frame info:列出当前所在文件以及当前所在代码行
列出断点:br li(break point list)
添加断点:br set(br set -f HomeContactViewController.m -l 122)
删除断点:br del
caflush:更新界面
lldb模拟函数返回值
当我们发现一个函数我们不想执行,只需要得到它的结果的时候,我们可以用lldb来完成这一件事。
在我们进入一个函数中后,我们可以使用 thread return [value]来直接返回该函数的值而不用执行。
3.利用facebook开源组件chisel增强llvm调试功能
chisel是facebook编写的一套扩展lldb命令的工具,下面是它的主页
https://github.com/facebook/chisel
推荐几个我常用的调试相关的软件和插件:
网络相关:charles chrome插件postman
xcode插件:
Go to sandbox(快速定位到模拟器沙盒)
MCLog(过滤调试日志信息)
参考资料:
http://www.peterfriese.de/debugging-tips-for-ios-developers/
http://www.cnblogs.com/stoic/archive/2012/07/10/2584967.html
网友评论