美文网首页
LLDB ① 介绍和流程控制

LLDB ① 介绍和流程控制

作者: _涼城 | 来源:发表于2022-03-26 14:45 被阅读0次

    什么是 LLDB

        LLDB(Low Lever Debug) 是 macOS 上 Xcode 中的默认调试器,支持在桌面和 iOS 设备和模拟器上调试 C、Objective-C 和 C++。
        LLDB 是作为一组可重用的组件构建的,这些组件高度利用了较大的 LLVM 项目中的现有库,例如 Clang 表达式解析器和 LLVM 反汇编器。
        标准的 LLDB 提供了一组广泛的命令,旨在与老版本的 GDB 命令兼容。 除了使用标准配置外,其可以安装 C++ 或者 Python 插件,可以很容易地自定义 LLDB 以满足实际需要。
        LLDB 是开源的,LLDB 的代码可以在LLVM中查看。

    命令

    命令结构

    <command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
    
    • <command>(命令)和<subcommand>(子命令):LLDB调试命令的名称。
    • <action>:执行命令的操作
    • <options>:命令选项
    • <arguement>:命令的参数
    • []:表示命令是可选的,可以有也可以没有

    命令选项

    LLDB 中的命令选项有规范形式(canonical,也称为“discoverable”)和缩写形式(abbreviated)

    lldb 调试

    Xcode 进入

    通过命中断点或点击 Pause program execution进入 LLDB 调试模式。

    Pause program execution

    终端进入

    在终端中输入 lldb 进入 LLDB 调试模式

    help 命令

        在 LLDB 中执行 help 命令就会列出所有命令列表,对于 LLDB 中的所有命令都可以查看文档 help {command}

    LLDB 部分命令表

    命令 描述
    apropos 模糊搜索命令
    breakpoint 操作断点
    command 自定义命令
    disassemble 反汇编指定命令
    expression 在当前线程上计算表达式。使用LLDB的默认格式显示任何返回值。
    frame 选择和检查当前线程堆栈
    language 切换语言 objc,swift,cplusplus
    log 控制 LLDB 内部输出
    memory 操作内存
    plugin 管理 LLDB plugin
    register 用于访问当前线程的寄存器
    process 进程交互
    session 管理 LLDB session
    settings LLDB 设置
    source 用于检查由当前目标进程的调试信息描述的源代码的命令
    statistics 打印调试会话的统计信息
    swift-healthcheck 显示LLDB调试器运行状况检查诊断
    target 用于在调试器目标上操作的命令
    thread 用于在当前进程中的一个或多个线程上操作的命令
    trace 用于加载和使用处理器跟踪信息的命令
    type 用于在系统类型上操作的命令
    version LLDB 版本
    watchpoint 观察点用于内存
    trace 用于加载和使用处理器跟踪信息的命令
    type 用于在系统类型上操作的命令

    LLDB 部分命令缩写

    缩写(abbreviations) 完整命令 描述
    add-dysm target symbols add 通过指定调试符号文件的路径或使用选项指定模块,将调试符号文件添加到目标的当前模块之一
    attach - 按ID或名称附加到进程。
    b breakpoint set 设置符号断点
    bt - 显示当前线程调用栈
    c 、continue process continue 继续当前程序
    call、p、print expression -- 在当前线程上计算表达式。使用LLDB的默认格式显示任何返回值。
    di、dis disassemble 反汇编指定命令
    display target stop-hook 在每次停止时计算表达式
    down - 选择较新的堆栈,默认为1
    up - 选择较旧的堆栈,默认为1
    env - 查看和设置环境变量
    exit、 q quit 退出 LLDB
    f thread backtrace 从当前线程中按索引选择当前堆栈帧
    finish thread step-out 完成当前堆栈的执行并在返回后停止
    image target modules 用于访问一个或多个目标模块信息的命令。
    kill process kill 终止当前程序
    l、list - 列出相关源代码
    n、next thread step-over 源码级别的单步执行,跨步调用
    ni、nexti thread step-inst-over 指令级别的单步执行,跨步调用
    po expression -O -- 输出 Object 描述
    re register 用于访问当前线程的寄存器
    s thread step-in 源码级别的单步执行,单步调用
    si thread step-inst 指令级别的单步执行,单步调用
    t thread select 切换线程
    v、var frame variable 当前堆栈变量
    vo frame variable -O 输出当前堆栈变量的描述
    x memory read 读取内存

    LLDB 流程控制

    process continue

    process continue 取消程序当前的暂停,使程序继续执行。 cprocess continue 的缩写形式

    对应 Xcode 中的process continue

    执行单步操作

    • thread step-over
      源码级别的单步执行,跨步调用。执行一行代码,如果所在这行代码是一个函数调用,那么就不会跳进这个函数,而是会执行这个函数,然后继续。nthread step-over 的缩写形式

      对应 Xcode 中的step over
    • thread step-in

      源码级别的单步执行,单步调用。执行一行代码,如果所在这行代码是一个函数调用,那么会跳进这个函数。sthread step-in 的缩写形式

      对应 Xcode 中的step into
    • thread step-instthread step-inst-over
      指令级别的单步执行,执行一行代码。(遇到汇编函数,会进入汇编函数内部)。
      'ni' 是 thread step-inst-over的缩写形式,thread step-inst-overthread step-over 类似。
      sithread step-inst 的缩写形式,thread step-instthread step-in 类似。

    thread step-out

    thread step-out 完成当前堆栈的执行并在返回后停止。。finishthread step-out 的缩写形式

    对应 Xcode 中的step out

    thread return

    thread return 可以使得当前函数立即返回,也就是说,后续代码都不会执行了。

    相关文章

      网友评论

          本文标题:LLDB ① 介绍和流程控制

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