美文网首页
lldb调试方法

lldb调试方法

作者: Onego | 来源:发表于2023-12-27 13:26 被阅读0次

下断点的方法

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
}

相关文章

网友评论

      本文标题:lldb调试方法

      本文链接:https://www.haomeiwen.com/subject/vyednctx.html