断点
1.添加断点
1.给test1函数添加断点(C函数)set 是子命令, -n 是选项,是--name 的缩写:
breakpoint set -n test1
2.给系统所有这个方法加断点:
breakpoint set --selector touchesBegan:withEvent:
3.指定文件 的某个方法添加断点:
breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
4.给ViewController类里面的三个方法添加断点
breakpoint set -n "-[ViewController save:]" -n "-[ViewController pauseGame:]" -n "-[ViewController continueGame:]"
5.遍历整个项目中满足Game:这个字符的所有方法添加断点:
breakpoint set -r Game:
6.遍历整个项目中满足 hank 这个字符的所有方法:
breakpoint set -r hank
b hank
7.给指定类添加方法 敲 b hankT 就会出现提示,回车即可
b -[ViewController hankTest1:]
2.删除断点(只能删除某一组)
删除第1组断点: breakpoint delete 1
删除所有断点: breakpoint delete
breakpoint delete 1.1 输出:0 breakpoints deleted; 1 breakpoint locations disabled. 没有断点被删除,只是被禁用
3.启用/禁用断点 enable/disable en/dis
启用第1组断点:breakpoint enable 1 简写:break en 1
启用 第1组的第1个断点:breakpoint enable 1.1
禁用所有断点:breakpoint disable 简写:break dis
4.查看断点列表
breakpoint list
5.流程控制
继续执行(continue的简写) c
单步运行,将子函数当做整体一步执行(next的简写) n
单步运行,遇到子函数会进去 s
6.查看帮助
breakpoint help
p/expression 用法
expression self.view.subviews
po self.view.subviews
p self.view.subviews
p 是 expression 的简写
po 调用oc的description方法
更改背景颜色 p self.view.backgroundColor = [UIColor redColor]
调出断点函数调用栈 bt
断点回退指令 回到调用这个方法的地方 up down
代码回退到上一个调用的地方,然后return掉 thread return
//可以设置成功
p (Person*)self.models.lastObject
p $7.name = @“hnak"
调出断点函数调用栈 bt
断点回退/前进指令 ,回到调用这个方法的地方 up down
回到函数调用栈的某一个 定位到某个方法的具体调用位置 frame select 3
打印出整个函数的参数 frame variable
https://github.com/shuyangxiaobao/LLDB
command + shift + M 可查看内存存储情况
breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
Breakpoint 1: where = 001--LLDB`-[ViewController touchesBegan:withEvent:] + 92 at ViewController.m:86, address = 0x0000000104bee3b0
po self.models
p [self.models addObject:[[Person alloc]init]]
po self.models
p (Person*)self.models[3]
(Person *) $2 = 0x00000001c0220d80
p $2.name
(NSString *) $3 = nil
p $2.name = @"xiaoming"
(NSTaggedPointerString *) $4 = 0xa006412031812da8 @"xiaoming"
po $2.name
xiaoming
po $2.age = 254
254
po $2
<Person: 0x1c0220d80>
po sizeof($2)
8
control + 回车。可以代码换行
p Person *p5 = [[Person alloc]init];
p5.name = @"我是p5";
p5.age = 31;
[self.models addObject:p5];
p (Person *)self.models[4]
(Person *) $14 = 0x00000001c0221ac0
p (Person *)self.models.lastObject
(Person *) $5 = 0x00000001c0224ba0
打印对象地址 p $5
(Person *) $5 = 0x00000001c0224ba0
p $5.age
(int) $6 = 256
po $6
256
设置对象属性值 p $5.age = 19
获取对象字节大小 po sizeof($6)
4
取地址 p &($6)
0x00000001034b46f0
添加断点,当改变p1的value值时断住
watchpoint set variable p1->_name
打印出内存存储的值
po 0x0000000100620198
給第一组断点添加代码 break command add 1
查看command列表 breakpoint command list 1
调试数组越界奔溃
调用[self test2];函数。
image lookup -a 0x183c53fd8
可打印 出异常的栈调用
网友评论