下断点的方法
1.下符号断点
br set -n "-[YBRWebViewController viewWillDisappear:]"
2.下地址断点
breakpoint set --address 0x1013d9e34
3.下方法断点
b NSLog
继续执行
c
打印命令
p/t 二进制打印
p/o 八进制打印
p/d 十进制打印
p/x 十六进制打印
更多打印说明
https://sourceware.org/gdb/onlinedocs/gdb/Output-Formats.html
//打印对象指针
(lldb) p object
(LGPerson *) $15 = 0x0000000101120ba0
//打印对象指针和p命令差不多
(lldb) p/x object
(LGPerson *) $16 = 0x0000000101120ba0
检查内存
//打印内存信息
(lldb) x object
0x101120ba0: 31 11 00 00 01 80 1d 00 00 00 00 00 00 00 00 00 1...............
0x101120bb0: 02 00 00 00 00 00 00 00 98 e8 64 9e ff 7f 00 00 ..........d.....
//格式化打印内存信息
(lldb) x/4gx object
0x101120ba0: 0x001d800100001131 0x0000000000000000
0x101120bb0: 0x0000000000000002 0x00007fff9e64e898
//更多说明
//https://sourceware.org/gdb/onlinedocs/gdb/Memory.html#Memory
读取寄存器
实际上入参会有(id obj,SEL _cmd)
register read
Xcode11
register read x0 类
register read x1 函数(方法)
Xcode10
register read x9 类
register read x8 函数(方法)
汇编中打印参数
po $arg3
-
arg1
是消息接受者 -
arg2
是发送的消息SEL -
arg3
才是OC中的参数
frame info
会告诉你当前的行数和源码文件
(lldb) frame info
frame #0: 0x000000010a53bcd4 DebuggerDance`main + 68 at main.m:17
frame select 断点跳到frame
frame select 1 # 断点跳到frame 1
查看当前帧中局部变量的属性
(lldb) frame variable # 查看当前帧中局部变量的属性
(lldb) pinternals 0x0000000282decbb0 # 查看自己想看的属性
如何打印+load 列表
(lldb) br s -r "\+\[.+ load\]$"
/*
输出:Breakpoint 6: 27 locations.
*/
//再通过,打印列表
(lldb) br list
- 原理:使用了lldb的breakpoint命令,通过正则下符号断点
UIView中的私有方法打印信息
1. 打印视图结构recursiveDescription
1.1 recursiveDescription
-[UIView recursiveDescription]
recursiveDescription这是一个私有方法, 用来打印任意的视图结构, 并按视图层次排列, 它会递归地做这件事, 对每个子视图, 再去找它们的子视图(比用Reveal查看视图结构更完整)。
1.2 _autolayoutTrace
-[UIView _autolayoutTrace]
recursiveDescription的简化版,去掉了UIView的一些描述
2. 检查视图控制器
-[UIViewController _printHierarchy]
来检查视图控制器
3. 检查对象中的实例变量和值
-[NSObject _ivarDescription]
4. 检查对象中的实例变量和值
-[NSObject _shortMethodDescription]
打印指定对象的所有属性,实例方法和类方法
查找要断点类中所有方法
5. 根据对象地址查看对象属性
(lldb) pinternals 0x280fb3b00 # 根据对象地址查看对象属性
(RTCPeerConnection) $18 = {
NSObject = {
isa = RTCPeerConnection
}
_factory = 0x0000000281474420
_localStreams = 0x0000000281445500 @"0 elements"
_hasStartedRtcEventLog = false
_delegate = 0x0000000282decbb0
}