iOS LLDB调试

一、简介

LLDB全称是Low Lever Debug

下断点快捷键command + \

二、LLDB断点设置

2.1 设置断点

breakpoint set -n XXX
set 是子命令,-n是选项 是--name 的缩写。

设置断点

Breakpoint 2: where = 001--LLDB`test1 + 8 at ViewController.m:19, address = 0x00000001000766d8
解释:
项目中的第二个断点,即为编号。
where = 001--LLDB test1 + 8 at ViewController.m:19:断点的位置,
工程名为001--LLDB,
在 ViewController.m中的第19行,
方法名为test1,
address = 0x00000001000766d8:内存地址。

2.2 OC方法设置断点

breakpoint set -n "[控制器名称 方法名称]"

oc方法设置断点

Breakpoint 1: 3 locations.
解释:
1:第一组断点
3:三个地方

2.3 查看断点列表

breakpoint list

查看断点列表

2.4 禁用/启用断点

breakpoint disable 禁用
breakpoint enable 启用

2.4.1 禁用/启用一组

禁用

启用

breakpoint enable 组号

2.4.2 禁用/启用某一个断点
禁用/启用某一个断点

2.5 删除断点

2.5.1 删除某组的某一个

breakpoint delete 组号

删除某一个

注意:可以看出它只是把它禁用了,并没有删除
删除某一组的某一个的结果

2.5.2 删除某组

breakpoint delete 组号

删除某组

2.5.3 删除所有组

breakpoint delete

删除所有断点

2.6 查看指令

2.6.1 查看lldb所有指令

help

指令集

2.6.2 查看lldb中子指令的所有指令

help breakpoint

子指令集

2.7 遍历整个项目中所有方法名为 touchesBegan:withEvent:

breakpoint set --selector touchesBegan:withEvent:

94个地方

我们点击一下,可以看出第一个断点地方是系统方法,并非是我们自己写的方法
第一个断点的地方

2.8 遍历特定文件中所有方法名为 touchesBegan:withEvent:

breakpoint set --file ViewController.m --selector touchesBegan:withEvent:

特定文件中所有方法名

2.9 遍历整个项目中满足Game:这个字符的所有方法

breakpoint set -r Game:

满足Game:这个字符

2.10 流程控制

2.10.1 继续执行
$c(continue)
2.10.2 单步运行,将子函数当做整体一步执行
$n(next)
2.10.3 单步运行,遇到子函数会进去
$s

三、LLDB代码执行

3.1 查看子控件

expression self.view.subviews

expression

问题1:指令pexpression的关系如何呢?
p

答案:不难看出pexpression的简写形式
简写形式

问题2:指令po又是啥呢?
help expression
help expression

答案:po其实就是调用了OCdescription方法

3.2 ppo的应用

添加数据

四、查看堆栈信息

4.1 查看堆栈信息

bt

(lldb) b test4
Breakpoint 1: where = 001--LLDB调试`-[ViewController test4] + 20 at ViewController.m:54:5, address = 0x000000010017e064
(lldb) c
Process 10967 resuming
2019-12-07 21:33:15.468965+0800 001--LLDB调试[10967:3499830] -[ViewController test1]
2019-12-07 21:33:15.469210+0800 001--LLDB调试[10967:3499830] -[ViewController test2]
2019-12-07 21:33:15.469313+0800 001--LLDB调试[10967:3499830] -[ViewController test3]
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x000000010017e064 001--LLDB调试`-[ViewController test4](self=0x000000010072db50, _cmd="test4") at ViewController.m:54:5
    frame #1: 0x000000010017e044 001--LLDB调试`-[ViewController test3](self=0x000000010072db50, _cmd="test3") at ViewController.m:50:5
    frame #2: 0x000000010017dfe8 001--LLDB调试`-[ViewController test2](self=0x000000010072db50, _cmd="test2") at ViewController.m:45:5
    frame #3: 0x000000010017df8c 001--LLDB调试`-[ViewController test1](self=0x000000010072db50, _cmd="test1") at ViewController.m:41:5
    frame #4: 0x000000010017e3a0 001--LLDB调试`-[ViewController touchesBegan:withEvent:](self=0x000000010072db50, _cmd="touchesBegan:withEvent:", touches=1 element, event=0x00000002839e0640) at ViewController.m:86:5
    frame #5: 0x000000019053eb64 UIKitCore`forwardTouchMethod + 328
    frame #6: 0x000000019053ea08 UIKitCore`-[UIResponder touchesBegan:withEvent:] + 60
    frame #7: 0x000000019054caf0 UIKitCore`-[UIWindow _sendTouchesForEvent:] + 1692
    frame #8: 0x000000019054e0a8 UIKitCore`-[UIWindow sendEvent:] + 3352
    frame #9: 0x000000019052aae8 UIKitCore`-[UIApplication sendEvent:] + 336
    frame #10: 0x00000001905a223c UIKitCore`__dispatchPreprocessedEventFromEventQueue + 5880
    frame #11: 0x00000001905a4798 UIKitCore`__handleEventQueueInternal + 4924
    frame #12: 0x000000019059d60c UIKitCore`__handleHIDEventFetcherDrain + 108
    frame #13: 0x000000018c4827e0 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
    frame #14: 0x000000018c482738 CoreFoundation`__CFRunLoopDoSource0 + 80
    frame #15: 0x000000018c481ed0 CoreFoundation`__CFRunLoopDoSources0 + 180
    frame #16: 0x000000018c47d01c CoreFoundation`__CFRunLoopRun + 1080
    frame #17: 0x000000018c47c8bc CoreFoundation`CFRunLoopRunSpecific + 464
    frame #18: 0x00000001962e8328 GraphicsServices`GSEventRunModal + 104
    frame #19: 0x00000001905126d4 UIKitCore`UIApplicationMain + 1936
    frame #20: 0x000000010017e4d0 001--LLDB调试`main(argc=1, argv=0x000000016fc878a8) at main.m:14:16
    frame #21: 0x000000018c307460 libdyld.dylib`start + 4
(lldb) 

4.2 查看上下方法

4.2.1 断点断住test3方法,这里的frame #0是方法编号,之后会用到。
断住test3
4.2.2 up 上一个方法
up
4.2.3 down 下一个方法
down
4.2.4 frame select 编号 直接跳转到某个方法
跳转到某个方法
4.2.5 frame variable 打印方法参数
打印方法参数
4.2.6 thread return代码回滚,回到上一个方法

四、内存断点

4.1 给属性增加断点

watchpoint set variable p1->_namep1对象的name属性下断点

给属性增加断点

4.2 通过内存地址设置

watchpoint set expression 内存地址

内存地址

五、其他指令

5.1 在断点时设置一些默认指令

break command add 组号

设置默认指令

5.2 每次stop时执行一些命令

注意:只对breadpoint,watchpoint
target stop-hook add -o "frame variable"

target stop-hook

5.2.1 查看当前所有的stop-hook

target stop-hook list

target stop-hook list

5.2.2 删除某一组的hook

undisplay 组号

undisplay

5.3 image

数据越界错误
5.3.1 数组越界错误定位到函数

image lookup -a 0x1bd10580c

根据堆栈信息找函数

5.3.2 快速查看某个类

image lookup -t 类名

查看类名

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

推荐阅读更多精彩内容