iOS调试工具 - LLDB 简单使用

是什么 -》有什么用 -》怎么用

LLDB是一个调试器,功能较为强大,集成在xcode的内部。

调试代码有多种方法,但当你用打印方式调试时不仅影响效率,而且整个过程有些许low,用lldb不仅高效率,面试也是一大加分点哦。

lldb调试工具怎么用呢?以下就列举出lldb的简单使用,首先我们打开xcode,在xcode主窗口底部的控制台中进行一些操作。

一、Help命令

当接触一个新功能或者安装一新软件时,感觉无从下手,首先用Help命令。再不行就help help,就会列出所有的lldb命令,再根据你所需要的选择相应的命令就能达到你的效果。也可以用help + 具体命令,查看其详情。apropos file 命令则是搜索LLDB帮助文档


iOS调试工具 - LLDB 简单使用_第1张图片
help.png

二、打印

1.print/p 打印一些基本数据 当打印对象时只是个指针,看不出东西 用help print 可以看到输出 'print' is an abbreviation for 'expression --' 是"expression --"的简称
2.po 打印oc对象,也可以是基本数据 简称为"expression -O --"


iOS调试工具 - LLDB 简单使用_第2张图片
image.png

三、Breakpoint

直接用写命令的方式打断点、调试、编辑断点信息。
1. b 某文件.m:30 给某文件的第30行打个断点
2.br l 列出当前工程的所有断点信息
3.br delete n 删除第n个断点
4.br enable n 使第n个断点有效
5.br disable n 使第n个断点失效
6.br set -n 某方法 设置关于这个方法的符号断点,在调用这个方式时,程序都会暂停
7.br mod -c "某文件" n 设置条件断点

image.png

8.Continue 简称c 断点继续执行 直接输入在lldb控制台上
9.stepOver 简称n 一步一步执行方法
10.stepInto 简称s 进入方法调用里面
11.stepOut 简称finish 跳出方法调用

四、Expression

1.expr 简单的打印操作 expre -- 相当于print expre -O --相当于po
2.expr+结构体 可以打印结构体的值
3.expr + 变量赋值 这个会改变变量的值 expression a = 20
4.expr+方法调用 可以给在运行时加一些行为
如下图,在断点处调用增加转换背景色的方法。是不是特别方便,不需要重新编辑代码,也不用重新运行就可以达到效果。


iOS调试工具 - LLDB 简单使用_第3张图片
image.png

五、Frame

运行时直接查看变量的值
1.frame variable 直接查看当前变量的值
2.frame variable 变量名 查看指定变量名的值


iOS调试工具 - LLDB 简单使用_第4张图片
image.png

六、Backtrace

bt 当程序crash掉时,可以用bt查看程序运行时函数调用的堆栈信息
bt all
bt 显示的是当前线程函数调用的信息,可以加all显示所有线程的堆栈信息

七、Thread

可以操作线程,显示当前线程信息,在运行时,直接改变方法调用的返回值
1.thread list 显示所有线程信息
2.thread select n 选择第n个线程
3.thread backtrace 显示当前thread的堆栈信息
4.thread backtrace all 显示所有thread的堆栈信息
5.thread until i 使线程运行,并在第i行时停下
6.thread return 返回值 直接改变当前方法调用的返回值


iOS调试工具 - LLDB 简单使用_第5张图片
image.png

八、Command

1、command script import "文件路径/文件名"
导入已有的脚本文件,在调试时可以直接用这个文件
2、command import "文件路径/文件名"
导入已有的 lldb 调试脚本文件
3、command unalias pf
删除用户自定义的 aliases
4、command history 打印在当前运行状态下,lldb 调试时command 历史。

九、Script

lldb 内置了 Python 的脚本解释器,可以解释运行 Python 代码
1.breakpoint command add -s python n 给第n个断点添加python代码
2.breakpoint command add -F "python文件名"."python方法名" n
给第n个断点添加导入的 python 文件中的方法调用

十、Watchpoint

当变量变化时,程序暂停,显示Watchpoint的变化
1.Watchpoint list 显示当前所有Watchpoint
2.watchpoint set variable 变量名 给变量设置watchpoint
3.watchpoint modify -c "条件" n 给第n个断点添加条件,只有满足条件时,watchpoint 才会触发
4.watchpoint modify -c "" n
条件置空时,即为给这个 watchpoint 删除条件
5.watchpoint set expression -- 内存地址
对任意内存地址进行观察
十一、Alias
当遇到较为复杂的命令,可以给这些命令定义一个别名,每次调用别名即可
1.command alias "别名" 具体命令 给具体命令设置一个别名 但这种只在当前运行过程有效
2.也可永久保存使用 LLDB在启动时会读取~/.lldbinit文件,所以可以打开这文件自己操作并保存。

十二、其他
image的用法也蛮多
1.可以查看工程中的库 image list
2.当我们有一个地址,想查找这个地址具体对应的文件位置,可以使用image lookup --address,简写为image lookup -a
3.当我们想查找一个方法或者符号的信息,比如所在文件位置等。我们可以使用image lookup --name,简写为image lookup -n。
4.image lookup --type 查看具体类型

Chisel 是 Facebook 开源的一款 lldb 命令集合文件,我们可以直接使用一些定义好的 lldb 命令来调试程序。
安装十分简单,确保 Mac 已经安装了 homebrew 环境
$ brew update
$ brew install chisel  即可安装

其实刚开始开发时就简单的用了下po,直到有次面试被问还会些其他lldb命令么,当时有点蒙,才开始多学多用。
只有在调试过程中多用,才能感觉到它的便利,再也不用NSLog一堆日志啦,再也不用就为了个小验证就改代码重新运行啦。

你可能感兴趣的:(iOS调试工具 - LLDB 简单使用)