LLDB的使用指令
屏幕快照 2018-05-11 下午4.49.17.png断点设置
- 通过名字设置C的断点
假设有个方法
void age(){
print("age")
}
通过命令在age上设置断点
breakpoint set -n age
其中 -n
是--name
的缩写 ,set
是子命令
- 通过名字设置OC的断点
假设ViewController中有两个OC的方法
-(void)test1:(NSString *)string{
}
-(void)test2:(NSString *)string{
}
通过命令给这两个方法设置断点
breakpoint set -n "[ViewController test1:]" -n "[ViewController test2:]"
其中OC的方法要用""
阔起来,多个断点间用空格隔开
- 通过名字设置断点,不管方法在哪个类里
breakpoint set --selector touchesBegan:withEvent:
其中 --selector
代表方法 touchesBegan:withEvent:
OC的方法名
- 通过文件设置断点,比如:设置
ViewController.m
这个类里的touchesBegan:withEvent:
breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
-
遍历方法名称设置断点
breakpoint set -r Game:
其中Game:
只是方法的一部分 -
查看当前的断点信息
指令 breakpoint list
Current breakpoints:
1: names = {'[ViewController test1]', '[ViewController exp1]', '[ViewController test2]', '[ViewController exp2]'}, locations = 0 (pending)
2: names = {'[ViewController test1:]', '[ViewController exp1:]', '[ViewController test2:]', '[ViewController exp2:]'}, locations = 2, resolved = 2, hit count = 0
2.1: where = textIphone`-[ViewController test1:] + 46 at ViewController.m:29, address = 0x00000001006465ee, resolved, hit count = 0
2.2: where = textIphone`-[ViewController test2:] + 46 at ViewController.m:33, address = 0x000000010064663e, resolved, hit count = 0
2.1
代表是第二组的第一个断点
-
禁用某个断点
breakpoint disable 1
-
启用断点
breakpoint enable 1.1
-
删除断点
breakpoint delete 1
如果delete
后不跟任何参数 默认为删除所有的断点 -
假如进入断点以后想要继续进行下一步操作,可以直接在控制台输入
c
继续操作 -
查看其他指令系统
help
-
查看断点的子指令
help breakpoint
-
简写形式
breakpoint
->break
disable
->dis
动态的执行指令
expression
执行某段代码expression
->p
,
help p
->'p' is an abbreviation for 'expression --'
,
po
是输出OC的对象,调用OC对象的描述方法 具体可以通过help expression
查看
比如我们进入断点后想查看当前视图的子视图
(lldb) expression self.view.subviews
输出: (__NSArray0 *) $0 = 0x000060c0000064a0 @"0 elements"
其中$0 这个可以理解成控制台当前的全局参数 在后面可以继续使用
- $0这个参数虽然在后面可以用,但是它是一个id类型,如果直接访问它原来的方法或者属性会报错,因此你可以在
p
指令的时候进行一个类型强转 - 使用p执行一段代码 代码换行使用
control + enter
- 在控制台上下按键可以执行上一条或者下一条
给某个断点设置默认的指令
command
指令
- 添加代码
breakpoint command add 1
回车 给断点1添加代码
Enter your debugger command(s). Type 'DONE' to end.
> 输入你的代码
> 输入'DONE'结束
过掉断点运行,进入到断点1时就会直接执行输入你的代码
这部分代码了
- 查看添加过的指令
breakpoint command list 1
查看断点1的指令
- 删除指令
breakpoint command delete 1
删除断点1下的指令
stop-hook
每次stop的时候去执行某些方法 watchPoint(内存断点)
pause 和 debugView 不会触发stop-hook
-
设置stop-hook
target stop-hook add -o "frame variable"
进入断点查看当前的参数 -
查看当前的stop-hook 删除全部list后面不跟数字
target stop-hook list 2
-
删除当前的stop-hook ,删除标号为1的stop-hook,如果删除全部后面不带内容
target stop-hook delete 1
-
禁用某一个stop-hook 屏蔽掉标号为6的stop-hook
undisplay 6
-
启用某个stop-hook
display 6
-
设置永久stop-hook
你只需要在/Users/你的用户
下建一个.lldbinit
文件 ,每次启动lldb的时候就会加载这个文件的内容
在.lldbinit
文件中 写target stop-hook add -o "frame variable"
,每次进入断点就会打印参数信息
其他的命令
-
查看内存
image lookup -a 0x0000000112e02796
,0x0000000112e02796
是崩溃信息中的一个堆区地址 -
进入image后 可以通过
down
查看下一个堆区地址up
看上一个堆区地址 -
查看某个类的定义
image lookup -t Person
image list
-
查看内存
memory read 0x600000226520
==x 0x600000226520
读寄存器
register read 地址
网友评论