高效 lldb 调试

高效 lldb 调试

本文主要会介绍 lldb 本身的使用以及 FaceBook 出品的 Chisel 的使用技巧。

lldb 小技巧

先来看看 lldb 自身的用法,一些说烂了的,比如 po 之类的就不再提了。

首先是一个快捷键 Command + Ctrl + Y 能够快速的暂停和恢复程序。第一次按下时程序暂停,可以进行 lldb 的调试,再次按下时恢复运行程序。如果当前命中了断点,这个快捷键也可以继续运行。

断点的小技巧

说到断点,有必要介绍三个简单的快捷键:

  1. F6:执行下一行代码
  2. F7:跳到代码内部执行,比如当前停在一个函数上,F6 会直接执行这个函数,F7 会跳到函数内部的第一行去执行
  3. F8:跳出当前代码块,和 F7 的作用恰好相反。

键盘上的 F1-F12 其实是特殊按键,比如 F6 表示增加亮度。因此上述的 F6 需要同时按下键盘左下角的 fn 键和顶部的 F6 键才能触发。然而,作为程序员,我们并不太需要这些花哨的功能,因此我建议在设置中把 F1-F12 改为标准按键,如下图所示:

当然,如果你用了我的 Mac 环境配置脚本,这个功能是自带的。

lldb 命令输入

手动暂停程序或者命中断点时,进入 lldb 调试界面,如图所示:

Mac 上的文本输入基本上都能用 Emacs 的某些特性,比如:

  1. Ctrl + A/E 移动光标,Ctrl + A 表示把光标移动到行首,注意它和 Command + ← 的区别。以上图为例,Ctrl + A 会把关闭移动到字母 p 左侧, 而 Command + ← 会把光标移动到 (lldb) 左侧,显然不合理。因此请使用 Ctrl + A。而 Ctrl + E 和 Command + → 的作用则是一致的,会把光标移动到这一行的最右。
  2. Ctrl + K:快速删除某一行的内容(需要先 Ctrl + A),需要注意
    Command + Delete 这个快捷键是无效的。
  3. Option + ←/→/Delete 表示左移、右移或删除一个单词,而且这个是通用快捷键,并不局限于 lldb 的调试窗口,比如浏览器里也可以用,这个快捷键非常好用,建议牢记。

动态调试