Published on

LLDB的3个常用调试命令

Authors
  • Name
    Twitter

LLDB 是 LLVM 项目的调试器,也是 Xcode 默认使用的调试工具。
在 Swift 和 Objective-C 开发里,我们最常用到的其实不是一大串复杂命令,而是下面这三个。

在 Xcode 中,我们既可以通过左侧的变量面板看当前状态,也可以直接在控制台里输入 LLDB 命令。

1. v

vframe variable 的别名。
它适合查看当前栈帧中的变量值,速度快,也比较直接。

v
v user

通常可以把它理解成“看当前作用域里的变量快照”。
在 Swift 里,它更适合看已经存储下来的属性和值。

2. p

pexpression 的别名。
它会执行表达式,所以不只是“看值”,还可以“算结果”。

p count
p users.count
p someFunction()

它适合:

  • 查看计算属性
  • 执行表达式
  • 临时验证某段逻辑

不过也因为它会求值,所以副作用要自己留意。

3. po

poexpression --object-description 的简写。
它适合打印对象的可读描述,调试时非常常用。

po user
po view.frame

如果对象提供了更友好的描述实现,po 的输出会更容易阅读。

extension Bird: CustomDebugStringConvertible {
    var debugDescription: String {
        return "The bird \(name) is \(conservationStatus.title)"
    }
}

如果对象实现了 CustomDebugStringConvertiblepo 通常会优先输出 debugDescription
如果没有,就会回退到系统默认描述。

什么时候用哪个

  • 只想快速看当前变量:用 v
  • 想执行表达式或看计算结果:用 p
  • 想看对象的可读输出:用 po

如果刚开始学 LLDB,只记住这三个命令,已经能覆盖日常调试里的大部分场景。