LLDB的一些使用技巧

在这次的学习lldb之前,一直在用一些lldb的命令而不自知,比如po命令,这个命令的作用是打印变量的信息(调用变量的description方法),这个方法给调试带来了很大的便利,如果没有这个命令,就只能频繁的写NSLog方法,而且还要重新编译运行,而使用po命令就不用编译运行了。
我在这里只介绍一些我常用的一些命令,一些其他的使用技巧可以参考下面的引用。

expression

这个命令的作用是在当前线程执行表达式,并展示返回值,前面说到的po命令其实就是这个命令的别名版本,它的原始写法是expression -O --

lldb1.png

如果你嫌拼写太长也可以这样写e -O --

lldb2.png

不过使用这种方式需要注意下不要和别的命令重名,比如 p 是打印变量信息,它的全称是print,但是你不可以使用pr,因为process也有pr前缀
这里还有一个非常好的用法,可以在运行时动态的改变界面,方便你的调试,

lldb3.png
lldb4.png
lldb5.png

平时调试界面的时候,如果要改变界面的元素的样式,每次都要编译,重新运行,有了这个功能可以大大缩短调试的时间,太棒了。

breakpoint

断点应该是我们最常用到的功能,breakpoint命令可以方便的设置断点

breakpoint set --name someMethod // 在方法名为someMethod的地方设置一个断点,这个断点是全局的,且不管是你调用的还是系统调用的都会停留在这个断点这里

还可以根据行数设置断点

br s --file test.m --line 12 // --file是文件名选项 --line 是行选项

列出全部断点

br list //展示所有的断点

删除断点

br delete 1 // 删除断点,delete 后面的加的数字是断点的id,在上面的br list可以看到所有断点的id

还可以设置条件断点

br s --file test.m --name someMethod: --condition 'flag == YES' // --condition 条件断点的选项 flag是someMethod参数的名称

watchpoint

这个命令的作用可以观察实例变量的变化,当你想监听某个变量的时候,你可以这样写

watchpoint set variable btn // btn就是你需要监听的实例变量

Thread Return

这个函数可以用来控制程序流程,比如你在调试类似以下函数的时候

- (void)someMethod:(BOOL)flag {
    if (flag) {
        return YES;
    }
    return NO;
}

你在某处调用了[self someMethod:YES],但是当你在调试时你又想查看flag参数为NO的情况,如果在没有lldb的情况下,你不得不更改参数值为NO,然后再重新编译运行。但是有lldb,你可以这样做,在if (flag) { 这行代码处设置一个断点,当程序执行到这里的时候,在控制台中输入以下命令

thread return NO

即可返回NO,并立即返回到[self someMethod:YES]处,是不是很酷😎

chisel

chisel其实就是一个Python脚本的集合,它封装了很多好用的命令,比如caflush它就是封装了e [CATransaction flush],还有很多其他的命令。在初次安装使用chisel时,有一点需要注意一下,在高版本的macos系统中,加载过程中会出现问题(我的系统版本为10.15),这时仅需在命令行工具中输入以下命令即可解决

defaults write com.apple.dt.lldb DefaultPythonVersion 2

总结

这里只是简单介绍了lldb的用法,在实际的使用过程中掌握以上的命令即可为开发调试节省很多时间,当然,还有很多的其他命令可以使用,比如frame、thread、process等等,这些就需要你去自己探索了。

与调试器共舞-LLDB的华尔兹
LLDB
LLDB Quick Start Guide
Chisel

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