iOS调试工具 - LLDB 简单使用

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

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

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

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

一、Help命令

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


help.png

二、打印

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


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+方法调用 可以给在运行时加一些行为
如下图,在断点处调用增加转换背景色的方法。是不是特别方便,不需要重新编辑代码,也不用重新运行就可以达到效果。


image.png

五、Frame

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


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 返回值 直接改变当前方法调用的返回值


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一堆日志啦,再也不用就为了个小验证就改代码重新运行啦。

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

推荐阅读更多精彩内容

  • 转载 与调试器共舞 - LLDB 的华尔兹: https://objccn.io/issue-19-2/ 推荐:i...
    F麦子阅读 3,332评论 0 10
  • 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThi...
    我是啊梁阅读 804评论 1 1
  • [转]浅谈LLDB调试器文章来源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc阅读 2,498评论 2 6
  • LLDB的Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能。平时用Xc...
    小笨狼阅读 20,463评论 31 187
  •   LLDB的Xcode默认的调试器,它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功能。平时用...
    Thinkdifferents阅读 1,550评论 1 4