常用命令:
Debugger commands:
... 常用命令
help -- 显示lldb支持命令列表
print -- 简写为p;打印,常用于打印值类型量
po -- 打印,常用于打印引用类型量
expression -- 简写为expr;计算当前线程上的表达式。用LLDB的默认格式显示任何返回值。
frame -- 简写为fr;用于选择和检查当前线程的堆栈帧的命令。
... 进程命令
thread list -- 线程列表
thread backtrace all -- 所有线程堆栈打印信息
thread backtrace -- 当前线程堆栈打印信息
thread backtrace 2 -- 2线程堆栈打印信息
frame info -- 栈帧信息
frame variable -- 简写fr v;帧变量列表
frame select 0 -- 选择帧
...
...寄存器
register read -- 读取寄存器,默认为all,可以指定某个寄存器
register write rax 123 -- 写入寄存器
...
... 符号断点
breakpoint -- 用于在断点上操作的命令(简写请参阅‘help b’)
breakpoint list -- 断点列表
breakpoint set -address 0x10dde2cf0 -- 用函数地址设置断点
breakpoint set -name persionInfo -- 用函数名称设置断点
... 内存读取
memory read/数量+格式+字节数 内存地址 -- 简写x;读取内存,默认二进制读取
x/数量+格式+字节数 内存地址 -- 读取内存,默认二进制读取
memory write 内存地址 数值 -- 写入内存
...
... 镜像
image list -- 依赖库列表
image lookup -type 类型 -- 查看类/结构体的所有属性和方法
image lookup -name 符号或函数名 -- 查找某个符号或者函数的位置
image lookup -address 地址 -- 根据内存地址查找在模块中的位置
...
Current user-defined container commands:
cat -- No help text
例子:
(lldb) p a // 打印a变量
(lldb) po persion // 打印persion引用类型的变量的地址
(lldb) po withUnsafePointer(to: &persion) {print($0)} // 打印persion值类型的变量的地址
(lldb) expr tableView.backgroundColor = UIColor.red // 修改背景颜色
(lldb) fr v -R a // 查看变量类型结构
(lldb) x/4gx person // 查看变量的内存
内存读取的说明:
例子:
(lldb) x/4gx person(引用变量)/0x600000c9d170
x/4gx person:
x
是读取内存命令,4
表示连续读取4段内存,后面的g
是每段内存按8字节读取,第二个x
的表示每段读取的结果按16进制显示, person
是要读取内存的变量。
完整的意思是:读取person
变量的内存按8字节分段,连续读取4段内存,读取的每段内存用16进制显示。
- 对于命令中的
g
,常用的大小格式为b
对应byte 1字节,h
对应half word 2字节,w
对应word 4字节,g
对应giant word 8字节 - 对于命令中的第二个
x
,我们还可以用o
对应8机制,b
对应2进制,x
对应16进制,f
对应浮点,d
对应10进制。
cat命令:
cat命令是额外的扩展命令,需要安装特殊的扩展文件才能使用。
1. 下载lldb命令扩展文件
2.在用户目录下添加.lldbinit文件
添加.lldbinit文件的路径:
/Users/用户名
有两种方法:
1.使用vim命令,依次执行命令:
cd /Users/用户名
vim ~/.lldbinit
最后添加文本内容:
plugin load 下载的lldb扩展文件夹下libfooplugin.dylib文件在计算机上的绝对路径
2.外部复制或者移入:
桌面复制一个txt文件命名为.lldbinit
;
然后打开该文件,文件添加文本内容:
plugin load 下载的lldb扩展文件夹下libfooplugin.dylib文件在计算机上的绝对路径
最后将桌面的文件复制或者移入 /Users/用户名 路径中。
重启Xcode就可以使用cat命令了。
例子:
(lldb) cat address 0x1077b3cf0
&0x1077b3cf0, Swift_framwork.ZBYSwiftAdvanceViewController.PersionModel.persionInfo() -> () <+0> , ($s14Swift_framwork29ZBYSwiftAdvanceViewControllerC12PersionModelV11persionInfoyyF)Swift-framwork.__TEXT.__text