iOS调试 LLDB使用

心已入冬 提交于 2020-02-28 07:25:03

我们职责是开发iOS应用,我们要做的就是生产bug和解决bug,调试对于每一个开发人员来说都是亘古不变的操作。如何高效调试提高我们的装X技能了,所以掌握Xcode的LLDB最为重要。

LLDB

首先瞟一眼LLDB长啥样,如下图:
LLDB调试
LLDB 是一个有着 REPL 的特性和 C++ 、Python 插件的开源调试器。

LLDB命令结构

<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]

其中:

  • command、subcommand:LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。
  • action:命令操作,想在前面的命令序列的上下文中执行的一些操作。
  • options:命令选项,行为修改器(action modifiers)。通常带有一些值。
  • argument:命令参数,根据使用的命令的上下文来表示各种不同的东西。
  • []:表示命令是可选的,可以有也可以没有。
    比例 po isFinish, po就是命令操作(print -object 简写), isFinish就是命令参数

原始命令

原始命令会将命令后面所有东西当做参数处理,很多原始命令也可以带命令选项,但是需要加-命令选项 -- 命令参数区分, 注意–后的空额

(lldb) expression -o -- aTureValue
true
// 错误示范
(lldb) expression -o --aTureValue
error: <EXPR>:3:3: error: consecutive statements on a line must be separated by ';'
-o --aTureValue
  ^
  ;

常用命令

命令 全命令 介绍
help - 命令提示,会罗列所有命令,非常有用,所有命令忘记了。有它就可以找其他命令了
a apropos 命令辅助,apropos 关键字可以搜索出相关的命令
e、ex、exp … expression 调试时动态执行表达式,并将结果打印出来,比如值动态更改,UI更改
vo/po -/print -object 与expr类似,打印对象,会调用description方法, 推荐使用vo更快,信息更全
v/p -/print print(type)表达式, 简单打印推荐使用v
call - 调用方法
bt thread backtrace 打印调用堆栈, 查看当前堆栈方法调用非常有用

实例技巧

调试UI

如果在运行界面得时候,有时候需要小调界面,常常需要写代码,然后重新编译,走流程,如果界面逻辑很深则需要很多时间。其实在断点调试的时候就可以执行表达式,刷新界面。

关键代码

// 先执行修改表达式
expression  XXX
// 最后刷新[一定要执行才有效果]
expression CATransaction.flush()

修改背景色为红色

修改前
修改前
修改
修改后
修改后

Tips: 这个调试在viewDidAppear(比如在viewDidLoad断点执行改变UI)执行之前不会立即有效,其他大部分刷新立即有效。

参考

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!