漫谈LLDB:从入门到精通

漫谈LLDB:从入门到精通

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

前言

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

入门

  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)的知识也要有所了解。这部分以个人水平难以给出有效的学习路径,但有一个最直接的途径那就是看懂项目的源码git

资料汇总

相关文章
相关标签/搜索