一、断点
基本操作:添加 、移除、监视(Watch)某个变量。
普通断点
Edit Breakpoint
1、Condition
这里可以输入条件表达式,满足条件的时候断点就会生效。
2、Ingore
在这里可以设置忽略断点次数。
3、Action
Action有6中类型
常用的就是Log Message和Debugger Command
- Log Message:%B会打印断点的名字,%H会打印断点的调用次数,@@中间可以输入表达式
- Debugger Command:po(打印对象信息),bt(打印函数栈),expression(表达式)。
- 勾选Automatically continue after evaluating actions之后程序会在断点产生后继续运行。可以输入调试信息至于不暂停程序。(?)
全局断点(Exception Breakpoint)
定位 main 里边的 EXEC_BAD_ACCESS:问题。
OpenGL ES的断点调试(OpenGL ES Error Breakpoint)
符号断点(Symbolic Breakpoint)
当程序运行到特定符号的时候就会产生断点。通过这种方式添加断点,就不需要在源文件中添加,也不需要知道断点设置在文件的第几行。
比普通断点多了两个属性Symbol和Module。
1. 方法名称:会对所有具有此方法名称的类方法生效。例如 initWithFrame: 。
2. 特定类的方法:OC类和C++类都适用,例如 ,[UIView initWithFrame:]或者 Shap::draw()。
3. 函数名称。例如普通C函数。
Test Failure Breakpoint
二、打印
#define NSLog(format, ...) do { fprintf(stderr, "<%s : %d> %s ", [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __func__); (NSLog)((format), ##__VA_ARGS__); fprintf(stderr, "------- "); } while (0)
三、Console(lldb)控制台命令
常用调试命令
help --帮助
print --打印
expression —改变程序内的值
po
// p 和 e 来代替 print 和 expression
LLDB 无法确定涉及的类型 (译者注:返回的类型)
// p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
// p/d (char)[[$array objectAtIndex:$a] characterAtIndex:0]