# LLDB调试一些常用命令和技巧

LLDB调试一些常用命令和技巧

1.常用命令

help是帮助命令,会打印出一个command list,help + 可以查看某一个命令的描述

LLDB有前缀识别,如next输入n就行了,print输入p,expression输入e就可以.生成的$4是暂存在lldb的变量名.

p打印变量

po打印变量的description

p/x 1000打印1000的16进制(十进制d,二进制t同理)

e int $a =2定义变量

e $a = 3修改变量(也可以修改断点时的代码中的变量)

image

流程控制

c(continue) 取消断点的暂停 一直到下一个断点,对应第一个按钮

n(next) 向下执行一行代码,如果是函数则黑盒执行,不会进入函数

s(step) 进入函数内部,如果下一行不是函数,那么n和s是一样的

finish 跳出函数

thread return (+返回值) 可以主动给函数返回值并立即跳出函数,返回值会在程序中起效 (例thread return NO thread return 110)

image

frame info 打印当前的代码函数,文件等等信息

一个例子

//打印出keyWindow的信息

(lldb) po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]
; layer = >
| >

//把window的view保存在lldb中

(lldb) eid$myView = (id)0x7f82b1d01fd0

//修改背景颜色

(lldb) e (void)[$myView setBackgroundColor:[UIColorblueColor]]

//但是只有程序继续运行之后才会看到界面的变化。因为改变的内容必须被发送到渲染服务中,然后显示才会被更新。渲染服务实际上是一个另外的进程 (被称作backboardd)这时执行[CATransaction flush]方法开启渲染

(lldb) e (void)[CATransaction flush]

//获取导航控制器

(lldb) eid$nvc = [[[UIApplicationsharedApplication] keyWindow] rootViewController]

//可以创建一个新的vc

(lldb) e id$vc = [UIViewController new]

//push出来

(lldb) e (void)[vc animated:YES]

//渲染

(lldb) e (void)[CATransaction flush]

你可能感兴趣的:(# LLDB调试一些常用命令和技巧)