一. 加载调试

调试本地文件

常规: lldb FilePath

带启动参数的调试: lldb FilePath Arg1 Arg2 ArgN

附加进程

通过进程id附加: ps aux | grep UserName | grep ProcName

(lldb)process attach --pid PidNum

通过进程名附加: (lldb)process attach -name ProcName

二. 断点

根据文件名和行号下断点(调试信息)

根据函数名下断点(调试信息)

根据虚拟地址下断点

breakpoint set -a VitrualAddress

查看/禁用/启用/删除 断点

breakpoint list

breakpoint disable BPNUM

breakpoint enable BPNUM

breakpoint delete BPNUM

内存断点

watchpoint set expression 地址

watchpoint set variable 变量名称 -- (源码调试可用)

条件断点

watchpoint modify -c 表达式

例子:

watchpoint modify -c '*(int *)0x12345678 == 20'

三. 辅助命令

存在调试信息时查看代码

默认: (lldb)l

BTW:编译时需要以gcc(cc) FileName –g 的方式输出,并且发现调试信息居然会带有注释。

查看函数代码: (lldb)list FunName

查看文件代码: (lldb)list FileName

查看反汇编

disassemble -a 虚拟地址 (dis -a $pc)

寄存器读写

register read

register write RegisterName Value(hex)

单步步入/单步步过/执行到返回/执行到下一个断点

step(si) → 单步步入 == F7

next(ni) → 单步步过 == F8

finish → 执行到返回 == ctrl+F9

continue → 执行到下一个断点

查看调用堆栈/执行到任意调用堆栈/查看线程

bt

frame select FRAMENUM

thread list

查看内存/修改内存

memory read [起始地址 结束地址]/寄存器 -outfile 输出路径

BTW: memory read 只能读取1024字节数据, 超出将报错。

解决方法:加-force参数

memory read 0x10001000 0x10003000 -force

或者:

memory read 0x10001000 -count 0x2000 -force

memory read $x0(寄存器) -count 0x2000 -force

--binary // 二进制输出参数

memory write 虚拟地址 Values

查看变量

print (指定类型)寄存器/虚拟地址

po (指定类型)寄存器/虚拟地址

expression $r6 = 1 // 设置r6寄存器的值

expression $r6 // 查看r6寄存器的值

expression username(源代码中变量) = @"11111"

expression [self btnTest] // 调用某类某方法

BTW:

1.加参数可以更改显示方式,如/x 十六进制方式打印。

2.po一般用作看对象信息

3.po命令是“expression -O —“命令的别名, expression功能很强大。

查看加载模块/查看代码位于节的信息

image list –o –f //-o显示地址 -f显示路径

image lookup

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*