iOS调试技巧—— LLDB指令

基础操作

指令 作用
c continue,进程继续运行
r run,进程重新运行
kill run,kill进程
s step-in
n step-over
finish step-ou

断点

指令 作用
b 打印所有断点
b -[NSString stringWithFormat:] Objective-C函数断点
b objc_msgSend C/C++函数断点
b resignFirstResponder 对所有含有resignFirstResponder的函数进行断点
br del 1 删除某个断点(标号可以通过「打印所有断点」取得

堆栈

指令 作用
bt 打印当前线程堆栈
bt all 打印所有线程堆栈
up 跳到上一个调用栈
down 跳到下一个调用栈

p 和 po

p指令可以打印结构体以及基本类型,有时会出现异常,尝试类型强转,如 p (int)a 。

除了p指令外,LLDB增加了po,如 po self ,用来打印一个OC对象的description。

又如下面这句:

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]```

– [UIView recursiveDescription]

可以用来打印一个UIView的层次结构。在Reveal还没有出来之前,这个方法是用来快速查看UIView的层次结构。

事实上,p 和 po 指令是用来执行代码,并输出返回值结果。用来打印输出只是返回结果罢了。所以,在断点处输入

po [self.view setBackgroundColor:[UIColor whiteColor]]```
是可以实时生效的。

其他

image指令可以操作符号相关的东西。

image lookup -a 0x0916cf7a
image lookup -r -n UIWebView

上面两个指令,前者通过地址打印符号,后者通过关键字打印与此关键字相关的符号。

参考

The LLDB Debugger

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1阅读 967评论 0 4
  • 转载 与调试器共舞 - LLDB 的华尔兹: https://objccn.io/issue-19-2/ 推荐:i...
    F麦子阅读 3,359评论 0 10
  • 你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThi...
    paraneaeee阅读 1,219评论 0 7
  • 前言 今天花了一天的时间终于把iOS的几种常见的调试方法给学习了一下,在这里给大家分享一下LLDB的使用,同时也是...
    Peak_One阅读 11,106评论 5 33
  • 与调试器共舞 - LLDB 的华尔兹 nangege 2014/12/19 你是否曾经苦恼于理解你的代码,而去尝试...
    McDan阅读 889评论 0 0