漫谈LLDB:从入门到精通

1,383 阅读3分钟

漫谈LLDB:从入门到精通

先声明两点:
1. 本系列谈的LLDB侧重于iOS系统,且基于Xcode。
2. 因为是开发HMLLDB总结的经验,所以内容会侧重于自定义Python脚本。

前言

我前不久开源了一个LLDB命令库HMLLDB,其中涉及到很多知识并不能用一篇文章简单讲完,所以准备写一系列相关的文章。这是第1篇,给出学习路线和资料。

入门

  1. 首先自然是掌握LLDB自带的命令,通过命中断点或点击Pause program execution进入LLDB调试模式后,输入help就能看到所有的命令。网上有大量的介绍文章,大同小异,请读者自行搜索,多看几篇,同时也试一试这些命令。其中要重点了解expressionbreakpointtarget命令。
  2. 在WWDC的调试(Debugging)主题把所有相关的视频都看完。其中有个必看的视频Advanced Debugging with Xcode and LLDB
  3. 这本书Advanced Apple Debugging and Reverse Engineering非常值得一看,优先看介绍LLDB系统命令和自定义LLDB命令的这两个章节。

进阶

  1. 了解如何用Python自定义命令脚本。同样的,先看网上的一些教程(上面那本书也有一章节也专门讲自定义命令),动手集成一个小脚本体验。然后再看官网的这节介绍Create a new lldb command using a Python function
  2. 到这里应该已经了解如何自定义命令脚本,但是写LLDB脚本会遇到非常多的坑和不熟悉的SB API,所以参考项目越多就越好,看看别人怎么处理、怎么调用。这里首先推荐两个项目,一个是我写的HMLLDB,另一个是Derek Selander(上面那本书的作者)的LLDB项目,这两个项目架构简单(几乎不存在架构),大多数命令执行一整段代码也对初学者较友好。其次推荐Facebook的chisel项目,命令简单实用。最后推荐的就是LLDB项目本身提供的examples
  3. 了解SB API。挖掘LLDB丰富的功能绕不开SB API,而官网对API注释很少,所以参考上面的项目中用到的API很重要。不过你还可以尝试HMLLDB项目中的plldbClassInfo命令,这个命令是我用来帮助理解部分SB API的。当然也可以看源码,也许能猜出一些API的用法。
  4. 如果你掌握了大部分常用SB API,也能比较愉快地写命令脚本了,接下来就可以看看源码深入了解。但在此之前,我还建议看看Jim Ingham在stackoverflow回答。我把他在2017年至今所有Answers看了一遍,受益匪浅。

精通

任何技术要达到精通,都要全面深入去学习,甚至还需要多方面的知识储备。全面掌握LLDB系统命令的每个子命令和选项、全面熟悉SB API,熟悉不同平台下LLDB的使用等等。其他相关(例如LLVM)的知识也要有所了解。这部分以我的水平难以给出有效的学习路径,但有一个最直接的途径那就是看懂项目的源码

资料汇总