美文网首页
LLDB 学习

LLDB 学习

作者: 化二缺 | 来源:发表于2020-04-02 16:45 被阅读0次

常用LLDB 指令

指令格式

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

  • <command> : 命令
  • <subcommand> : 子命令
  • <action> : 命令操作
  • <options> : 命令选项
  • <arguments> : 命令参数

比如 给 test 函数设置断点
breakpoint set -n -test

  • breakpoint 是 <command>

  • set 是 <action>

  • -n 是 <options>

  • test 是 <arguments>

  • help<command>

  • 查看指令的用法
  • 比如help breakpoint


    help命令实例.png
expression <cmd-options> -- <expr>
  • 执行一个表达式
  • <cmd-options> : 命令选项
  • --: 命令选项结束符 ,表示所有命令选项已经设置完毕,如果没有命令选项,可以省略
  • <expr> :需要执行的表达式

expression self.view.backgroundColor = [UIColor redColor] (OC)
expression self.view.backgroundColor = UIColor.red (swift)

  • expresion , expression -- 和指令 print ,p ,call 的效果一样
  • expression -O -- 和指令 po 的效果一样

可以动态的给程序添加一句代码,而不用在程序里面写 并且实时的看到调试效果 ,为了简单起见可以直接用p
p self.view.backgroundColor = UIColor.red

thread backtrace
  • 打印线程的堆栈
打印函数调用堆栈信息.png
  • 和指令bt 效果一样

  • thread return[<expr>]

  • 让函数直接返回某个值 ,不会执行断点后面的代码

  • frame variable[<variable-name>]

  • 打印当前堆栈的栈帧的变量

  • thread continue , continue ,c :程序继续运行

  • thread step-over, next , n : 单步运行 把子函数当做整体一步执行

  • thread step-in ,step ,s :单步运行 ,遇到子函数会进入子函数

  • thread step-out ,finish : 直接执行完当前的所有代码,返回到上一个函数

  • si , ni 和 s,n 类似

    • s, n 是源码级别 (Source Level
    • si ,ni 是汇编指令级别 (Instruction Level)
breakpoint
  • breakpoint set -a 函数地址
  • breakpoint set -n 函数名
    • breakpoint set -n test
    • breakpoint set -n touchesBegan:withEvent:
    • breakpoint set -n "-[ViewController touchesBegin:withEvent:]"
  • breakpoint set -r 正则表达式
  • breakpoint set -s 动态库 -n 函数名
  • breakpoint list
    列出所有的断点(每个断点都有自己的编号)
  • breakpoint disable 断点编号: 禁用断点
  • breakpoint enable 断点编号:启用断点
  • breakpoint delete 断点编号 :删除断点
  • breakpoint command add 断点编号
    给断点预先设置需要执行的命令 到触发断点时,就会按照顺序执行


    给断点加断点卡住时需要执行的命令.png

    相当于


    直接用Xcode操作.png
  • breakpoint command list 断点编号
    查看某个断点设置的命令
    -breakpoint command delete 断点编号
    删除某个断点的设置命令
内存断点
  • 在内存数据发生改变的时候触发
  • watchpoint set variable 变量

watchpoint set variable self->age

  • watchpoint set expression 地址

watchpoint set expression &(self->_age)

  • watchpoint list
  • watchpoint disable 断点编号
  • watchpoint enable 断点编号
  • watchpoint delete 断点编号
  • watchpoint command add 断点编号
  • watchpoint command list 断点编号
  • watchpoint command delete 断点编号
模块查找 image lookup
  • image lookup -t 类型 :查找某个类型的信息
查找某个类型的信息.png
  • image lookup -a 地址 :依据内存地址查找在模块中的位置


    依据内存地址查找错误所在的行号.png
  • image lookup -n 符号或者函数名 :查找某个符号或者函数的位置


    查找某个函数所在的文件和行数.png
  • image list
    列出所有加载的模块信息
    image list -O -f 打印模块的偏移地址,全路径

相关文章

  • lldb使用

    lldb 为什么学习LLDB 工作中花大量时间调试 lldb 减少调式时间,增加乐趣 不写不必要的打印 log 代...

  • 十六、LLDB(一)

    学习LLDB指令。掌握LLDB指令,不仅仅在逆向上有用,在平时开发调试中也是事半功倍。 一、简介 终端上的LLDB...

  • LLDB学习

    p p/s 输出地址和具体的值 po输出具体的值(oc里所有的对象都是用指针表示的,打印出来的是对象的指针,而不是...

  • LLDB 学习

    常用LLDB 指令 指令格式 [ [ ...] ] [- options [option-value]] [...

  • LLDB-iOS高效开发必备利器详解

    LLDB 一、什么是lldb lldb官网文档地址:https://lldb.llvm.org/[https://...

  • 动态调试高级用法

    LLDB - lldb_commands 下载地址LLDB 安装将下载文件解压,并将lldb_commands目录...

  • iOS LLDB调试

    掌握以下lldb命令,够用. ### LLDB调试总结 eNSString*$str=@"test"...

  • IOS逆向_动态调试:LLDB

    1. LLDB简介; 2. 常用的LLDB语法; 1. LLDB简介: 1.1 概念: LLDB是Xcod...

  • iOS 都要知道的LLDB介绍与Chisel进阶

    一、LLDB 什么是LLDB LLDB[http://lldb.llvm.org/]是一个有着 REPL 的特性和...

  • LLDB学习总结

    目录 设置断点 help expression print & po 流程控制 创建断点 watchpoit 总结...

网友评论

      本文标题:LLDB 学习

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