美文网首页
iOS调试工具 - LLDB 简单使用

iOS调试工具 - LLDB 简单使用

作者: CCChaya | 来源:发表于2018-07-21 18:54 被阅读0次

    是什么 -》有什么用 -》怎么用

    LLDB是一个调试器,功能较为强大,集成在xcode的内部。

    调试代码有多种方法,但当你用打印方式调试时不仅影响效率,而且整个过程有些许low,用lldb不仅高效率,面试也是一大加分点哦。

    lldb调试工具怎么用呢?以下就列举出lldb的简单使用,首先我们打开xcode,在xcode主窗口底部的控制台中进行一些操作。

    一、Help命令

    当接触一个新功能或者安装一新软件时,感觉无从下手,首先用Help命令。再不行就help help,就会列出所有的lldb命令,再根据你所需要的选择相应的命令就能达到你的效果。也可以用help + 具体命令,查看其详情。apropos file 命令则是搜索LLDB帮助文档


    help.png

    二、打印

    1.print/p 打印一些基本数据 当打印对象时只是个指针,看不出东西 用help print 可以看到输出 'print' is an abbreviation for 'expression --' 是"expression --"的简称
    2.po 打印oc对象,也可以是基本数据 简称为"expression -O --"


    image.png

    三、Breakpoint

    直接用写命令的方式打断点、调试、编辑断点信息。
    1. b 某文件.m:30 给某文件的第30行打个断点
    2.br l 列出当前工程的所有断点信息
    3.br delete n 删除第n个断点
    4.br enable n 使第n个断点有效
    5.br disable n 使第n个断点失效
    6.br set -n 某方法 设置关于这个方法的符号断点,在调用这个方式时,程序都会暂停
    7.br mod -c "某文件" n 设置条件断点

    image.png
    8.Continue 简称c 断点继续执行 直接输入在lldb控制台上
    9.stepOver 简称n 一步一步执行方法
    10.stepInto 简称s 进入方法调用里面
    11.stepOut 简称finish 跳出方法调用

    四、Expression

    1.expr 简单的打印操作 expre -- 相当于print expre -O --相当于po
    2.expr+结构体 可以打印结构体的值
    3.expr + 变量赋值 这个会改变变量的值 expression a = 20
    4.expr+方法调用 可以给在运行时加一些行为
    如下图,在断点处调用增加转换背景色的方法。是不是特别方便,不需要重新编辑代码,也不用重新运行就可以达到效果。


    image.png

    五、Frame

    运行时直接查看变量的值
    1.frame variable 直接查看当前变量的值
    2.frame variable 变量名 查看指定变量名的值


    image.png

    六、Backtrace

    bt 当程序crash掉时,可以用bt查看程序运行时函数调用的堆栈信息
    bt all
    bt 显示的是当前线程函数调用的信息,可以加all显示所有线程的堆栈信息

    七、Thread

    可以操作线程,显示当前线程信息,在运行时,直接改变方法调用的返回值
    1.thread list 显示所有线程信息
    2.thread select n 选择第n个线程
    3.thread backtrace 显示当前thread的堆栈信息
    4.thread backtrace all 显示所有thread的堆栈信息
    5.thread until i 使线程运行,并在第i行时停下
    6.thread return 返回值 直接改变当前方法调用的返回值


    image.png

    八、Command

    1、command script import "文件路径/文件名"
    导入已有的脚本文件,在调试时可以直接用这个文件
    2、command import "文件路径/文件名"
    导入已有的 lldb 调试脚本文件
    3、command unalias pf
    删除用户自定义的 aliases
    4、command history 打印在当前运行状态下,lldb 调试时command 历史。

    九、Script

    lldb 内置了 Python 的脚本解释器,可以解释运行 Python 代码
    1.breakpoint command add -s python n 给第n个断点添加python代码
    2.breakpoint command add -F "python文件名"."python方法名" n
    给第n个断点添加导入的 python 文件中的方法调用

    十、Watchpoint

    当变量变化时,程序暂停,显示Watchpoint的变化
    1.Watchpoint list 显示当前所有Watchpoint
    2.watchpoint set variable 变量名 给变量设置watchpoint
    3.watchpoint modify -c "条件" n 给第n个断点添加条件,只有满足条件时,watchpoint 才会触发
    4.watchpoint modify -c "" n
    条件置空时,即为给这个 watchpoint 删除条件
    5.watchpoint set expression -- 内存地址
    对任意内存地址进行观察
    十一、Alias
    当遇到较为复杂的命令,可以给这些命令定义一个别名,每次调用别名即可
    1.command alias "别名" 具体命令 给具体命令设置一个别名 但这种只在当前运行过程有效
    2.也可永久保存使用 LLDB在启动时会读取~/.lldbinit文件,所以可以打开这文件自己操作并保存。

    十二、其他
    image的用法也蛮多
    1.可以查看工程中的库 image list
    2.当我们有一个地址,想查找这个地址具体对应的文件位置,可以使用image lookup --address,简写为image lookup -a
    3.当我们想查找一个方法或者符号的信息,比如所在文件位置等。我们可以使用image lookup --name,简写为image lookup -n。
    4.image lookup --type 查看具体类型

    Chisel 是 Facebook 开源的一款 lldb 命令集合文件,我们可以直接使用一些定义好的 lldb 命令来调试程序。
    安装十分简单,确保 Mac 已经安装了 homebrew 环境
    $ brew update
    $ brew install chisel  即可安装
    

    其实刚开始开发时就简单的用了下po,直到有次面试被问还会些其他lldb命令么,当时有点蒙,才开始多学多用。
    只有在调试过程中多用,才能感觉到它的便利,再也不用NSLog一堆日志啦,再也不用就为了个小验证就改代码重新运行啦。

    相关文章

      网友评论

          本文标题:iOS调试工具 - LLDB 简单使用

          本文链接:https://www.haomeiwen.com/subject/xpnhmftx.html