最近逛微博,看到一条 LLDB 调试方法的微博,感觉是时候总结一下了,毕竟原文很简短,没有后续学习是看不懂的。简书贴图一直失败,无语,现在没有图片就将就看吧。
微博原文
推特上Peter Steinberger分享了一个LLDB调试打印一些类型的小诀窍. 不过马上有人回复了一个更方便的方法.详情请戳原文.
微博截图中更方便的方法
中用到的知识点是符号断点、断点动作和断点范围中的 User。
- 符号断点是什么?如何使用?
符号断点会在执行到特定符号时暂停程序(不管是你调用还是苹果调用)。符号可以是一个方法名、类中的一个方法或者任何 C 方法(objc_msgSend)。
- 指向 -[NSException raise] 的符号断点与异常断点一样。
- 指向 malloc_error_break 和 -[NSObject doesNotRecognizeSelector:] 的符号断点对调试与内存相关的崩溃很有帮助。
- 符号断点的符号Symbol如何书写?
- 方法名:pathsMatchingExtensions:
- 函数名:malloc_error_break
- 指定类的方法名:减号(-)表示实例方法,加号(+)表示类方法
-[NSArray objectAtIndex:]
-[UIViewController viewDidLoad]
-
断点的条件表达式Condition如何书写?
i > 5000
i == 99
(BOOL)[item isEqualToString:@"three”],前面的(BOOL)是必须的,否则console会提示类型不符号,导致条件不能生效。 -
断点的动作Action是什么?断点到达后触发指定的动作。可以是 LLDB 命令,可以是 Python 脚本等等。最常见的用法应该是不停机加 log message 了。
-
断点范围:Specifying the Scope of a Breakpoint断点范围
- User:当前用户所有的工程
- Project:默认范围,当前打开的工程
- Workspace:当前打开的工作空间
-
共享断点:将断点提交到版本系统,断点会保存到工程文件包的 xcshareddata 目录,将该目录提交到版本控制系统中即可共享。
-
观察点:到达断点时才能设置。观察点是有个数限制的,在intel CPU上最大是4个,在ARM CPU上最大是2个。
参考:
苹果官方断点帮助
《iOS 编程实战》之调试
网友评论