LLDB工具使用

  授人以鱼不如授人以渔,我们常常看到别人使用屌屌的LLDB指令,完成屌屌的动态调式,我们总是送上仰望的眼神(大神啊!),我们其实可以自己查一下所有的LLDB指令,并了解他们的使用方法和相关语法,达到我们的调试目的。
在终端输入lldb进入LLDB动态调试环境,并输入help即可查看所有的LLDB命令:

image.png

LLDB的调式命令

命令 注释
apropos 列出与单词或主题相关的调试器命令.
breakpoint 操作断点的命令 (参见 'help b' 的简写.)
bugreport 用于创建特定的bug报告的命令.
command 自定义LLDB命令管理命令.
disassemble 反汇编当前目标中的指定指令。默认为当前线程和堆栈帧的当前函数.
expression 计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值.
frame 用于选择和检查当前线程的堆栈帧的命令.
gdb-remote 通过远程GDB服务连接一个进程. 如果没有指定主机,则假定为localhost.
gui 切换到基于GUI的模式.
help 显示所有调式命令,或者关于制定命令的详情.
kdp-remote 通过远程KDP服务连接一个进程,如果没有制定UDP端口,就默认使用41139端口.
language 制定命令的语言.
log 控制LLDB内部日志记录的命令.
memory 用于操作当前目标进程内存的命令.
platform 管理和创建平台的命令.
plugin 管理LLDB插件的命令.
process 用于与当前平台上的进程交互的命令.
quit 退出LLDB调式.
register 用于访问当前线程和堆栈帧的寄存器的命令.
reproducer 控制LLDB复制器的命令.
script 使用提供的代码调用脚本注释器并显示任何结果。如果没有提供代码,则启动交互式注释器.
settings 管理LLDB设置的命令.
source 用于检查由当前目标进程的调试信息描述的源代码的命令.
statistics 打印调试会话的统计信息
target 用于操作调试器目标的命令。
thread 在当前进程操作一个或多个线程的命令.
type 用于在类型系统上操作的命令.
version 显示LLDB 调试器版本.
watchpoint 在观察点上操作的命令.

一些命令的缩写(输入“帮助命令别名”获取更多信息):

缩写指令 注释
add-dsym 将调试符号文件添加到目标的模块
attach 通过ID或名称附加到进程
b 设置断点的一种简写格式
bt 显示当前线程调用堆栈,可加任何数字显示最多堆栈。或'all'显示所有线程.
c 继续执行当前进程中所有线程
call 计算当前线程上的表达式。使用LLDB的默认格式显示返回值
continue 继续执行当前进程中的所有线程.
detach 与当前目标进程分离.
di 反汇编当前目标中的指定指令。默认为当前线程和堆栈帧的当前函数.
dis 汇编当前目标中的指定指令。默认为当前线程和堆栈帧的当前函数.
display 在每个stop处计算一个表达式(参见'help target stop-hook')。
down 选择一个更新的堆栈帧。默认情况下移动一帧,数值参数可以指定任意数字.
env 查看和设置环境变量的简写。
exit 退出 LLDB 调试.
f 从当前线程中按索引选择当前堆栈帧(参见thread backtrace)。
file 使用该参数作为主可执行文件创建一个target.
finish 完成当前堆栈帧的执行,返回后停止。默认为当前线程,除非指定.
image 用于访问一个或多个目标模块信息的命令.
j 将程序计数器设置为新地址.
jump 将程序计数器设置为新地址.
kill 终止当前目标进程.
l 使用几种简写格式之一列出相关的源代码.
list 使用几种简写格式之一列出相关的源代码.
n 源码单步,跨步调用. 默认当前线程,除非指定.
next 源码单步,跨步调用. 默认当前线程,除非指定..
nexti 指令级单步、跨步调用。默认为当前线程,除非指定.
ni 指令级单步、跨步调用。默认为当前线程,除非指定.
p 计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值.
parray 计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值.
po 计算当前线程上的表达式。显示格式由类型的作者控制的任何返回值.
poarray 计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值.
print 计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值.
q 退出 LLDB 调试.
r 加载调试器中的可执行文件.
rbreak 在可执行文件中设置一个或一组断点.
re 用于访问当前线程和堆栈帧的寄存器的命令.
repl 计算当前线程上的表达式。使用LLDB的默认格式显示任何返回值.
run 加载调试器中的可执行文件.
s 源码级单步,进入调用。默认为当前线程,除非指定.
si 指令级单步,进入呼叫。默认为当前线程,除非指定。
sif 步骤遍历当前块,如果直接进入名称与TargetFunctionName匹配的函数,则停止.
step 源码级单步,进入调用。默认为当前线程,除非指定.
stepi -- 指令级单步,进入呼叫。默认为当前线程,除非指定.
t 更改当前选择的线程。
tbreak 使用几种简写格式中的一种设置一次性断点.
undisplay 在每个Stop(由Stop -hook index指定)处停止显示表达式
up 选择旧的堆栈帧。默认情况下移动一帧,数值参数可以指定任意数字.
v 显示当前堆栈帧的变量。默认为作用域内的所有参数和局部变量。
var 显示当前堆栈帧的变量。默认为作用域内的所有参数和局部变量。
vo 显示当前堆栈帧的变量。默认为作用域内的所有参数和局部变量。
x 从当前目标进程的内存中读取.

  如果想要了解某一个命令的使用可以在终端输入:help + command
eg:要查看breakpoint的使用,help breakpoint

breakpoint指令

b指令

如果觉得好,请给一个👍撒

  或者如果想要了解某一个命令组合的使用可以在终端输入:help + command + subcommand,以此类推。
eg: help target symbols

image.png

n(单步,碰到函数算一步,thread step-over,next)
c 继续执行,取消暂停
s(单步,碰到函数会进去,thread step in)
expression(expr,e)
po(只输出结果,包含值)
p/print(输出有类型,地址别名,值,即description)
breakpoint(break,b) set -n “名字” 如“-[viewController viewDidLoad]”
break set -r 字符串 工程所有含字符串都下断点如viewDidLoad
b -[viewController viewDidLoad]
b isEmpty 在C语言函数上下断点,
p/x 18 以十六进制输出18
p/t 16 以二进制输出16
p/d 0x00000012 以十进制输出

thread backtrace 当前线程回溯,可看到当前断点之前所有frame
frame select -r <index-offset> 当前frame,偏移的下标可看到汇编
frame variable 显示当前栈帧的所有变量
thread return NO/YES 可用于控制成了的流程,在执行时它会把可选参数加载进返回寄存器,然后立即执行返回命令,跳出当前栈帧,使得函数的剩余部分不会被执行

po self.upButtonLoad.allTargets
e UIButton *myBtn = (UIButton *)0x10e709bf0 po [myBtn actionsForTarget:(id)0x10e709bf0 forControlEvent:0] 可拿到事件SEL

watchpoint (command,delete,disable ,enable ,ignore, list ,set)
watchpoint command add “frame variable” 只要断点一来就执行frame variable执行,也可以通过watchpoint command list展示,通过watchpoint command delete删除

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

推荐阅读更多精彩内容