LLDB 断点调试

2018-05-10  本文已影响0人  小宝_ab67

断点


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

demo地址

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

可打印 出异常的栈调用

上一篇 下一篇

猜你喜欢

热点阅读