iOS断点调试

1.断点调试App

a.设置常规断点

添加断点:在xcode中代码编辑器中右边单击你想调试的代码处就可以添加断点,再次单击可以停用断点,添加断点后右键点击断点可以删除断点或者快捷键(command+\)。

b.编辑断点

条件断点在断点上按住ctrl再鼠标单击或者右键单击,可以弹出编辑断点菜单,在这里我们可以为断点设置特殊条件。

下面我们为这段代码添加断点并添加如下条件:

)

上面的意思就是只有当i==10的时候断点才会触发。还有一个地方是当我们勾选Automatically continue after evaluating actions之后程序进入断点不会中断执行,只会执行我们的action,如果不勾选程序则会和普通断点一样,暂停程序,等待用户命令。

这里面的action有非常多钟选择

可以执行AppleScipt(苹果自己的脚本语言),还有capture GPU Frame这个功能现在基本没撒用了,最新的调试gpu都采用instruments来调试了,主要常用是打印日志或者播放一段声音,或者执行一段shell脚本。

c.单步执行,断点管理

断点执行面板下面来认识一下调试断点的界面,当程序执行到一个断点的时候,会在xcode下方出现如下面板。

上面四个红色框中的按钮分别表示,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

你也可以添加Symbolic Breakpoint这种断点允许你配置catch指定异常情况。

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中的。

接下来我们可以使用这个变量进行计算

我们可以看到p(print)命令和e(expression)命令貌似差不多,可以使用help p查看到p命令其实是对expression命令的一个缩写包装'p' is an abbreviation for 'expression --'

现在我们可以在lldb中获取变量的值以及计算表达式的结果了。但是经常我们的需求是,在断点中发现某些变量期待的值和我们想象的不一样,这时候我们要修改这个值怎么办?

d.修改运行时变量值

这当然也是一件很简单的事情,像下面这样,我们使用p命令给frame.size.height 赋值到$23 然后直接修改$23的值即可

需要注意的是修改了内存中的值需要执行下一步才会在程序中体现出来。最简单就是在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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容

  • 转载 与调试器共舞 - LLDB 的华尔兹: https://objccn.io/issue-19-2/ 推荐:i...
    F麦子阅读 3,331评论 0 10
  • 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1阅读 954评论 0 4
  • [转]浅谈LLDB调试器文章来源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc阅读 2,487评论 2 6
  • 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThi...
    paraneaeee阅读 1,186评论 0 7
  • 与调试器共舞 - LLDB 的华尔兹 nangege 2014/12/19 你是否曾经苦恼于理解你的代码,而去尝试...
    McDan阅读 881评论 0 0