iOS-LLDB

329 阅读2分钟

「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

简介

lldb全称为"Low Level Debugger",是苹果出品内置到Xcode中的调试工具, 支持的语言有 C、C++、Object-C等, 支持的系统当然是苹果的亲儿子了 OSX 和 iOS了.

lldb的能力有哪些呢?简单概括一下就是:

  1. 在指定的条件下运行程序
  2. 在指定的条件下停止程序
  3. 在程序停止的时候查看程序内部发生的事件
  4. 在程序停止时修改程序, 观察程序变化

lldb没有图形化界面, 都是使用命令来操作, 当然作为一个iOS开发的话, 经常会用到的lldb命令就是po , 打印当前内存中的指定变量存储的数据

常用命令

p 、po

p 和 po 还是不一样的

(lldb) p aa
(CGFloat) $8 = 20

(lldb) po aa
20

(lldb) p bb
(__NSCFString *) $19 = 0x0000608000437660 @"这是一个字符串"

(lldb) po bb
这是一个字符串

他们的区别在于 po: 输出值 p: 输出值+值类型+引用名+内存地址

expression

expression 作用就在于在程序停止的时候修改程序

//expression打印值
(lldb) expression aa
(CGFloat) $10 = 67

//expression修改值
(lldb) expression aa = 80
(CGFloat) $11 = 80

//打印修改后结果
(lldb) p aa
(CGFloat) $12 = 80

(lldb) 

expression 有一个简写就是exp

call

call 的作用就是主动调用一个方法, 并打印返回值

(lldb) call aa
(CGFloat) $12 = 70
(lldb) call bb
(__NSCFString *) $16 = 0x0000608000437660 @"我是一个字符串"

bt

bt 的作用就是查看当然程序的堆栈信息, 堆栈信息一般都很长, 如果嫌太长的和话可以使用 bt 10来限制打印堆栈的条数, 查看当前堆栈信息可以有效的知道当前程序是有哪些方法的调用链, 从而找到问题的所在.

image lookup

在正常的开发过程中经常会出现崩溃的情况, 那么Xcode会在控制台打印出来当前的堆栈信息, 有时候可以通过这些信息找到问题的所在, 从而改正. 但是很多时候并不清楚问题到底在哪里? 如何查看呢?

image lookup -a 0x00000001009a9f3a

使用这个命令可以查看到当前的奔溃在哪个文件, 哪一个行中, 这样就很容易定位到具体的问题所在了

结语

lldb 当然还有很多强大的功能, 而我仅仅是一个入门学徒, 如果有更好的意见请发到评论区, 我们一起学习进步, 后续lldb还有学到新的知识, 继续回来补充这篇文章.