条件判断
- 带条件判断的断点=- conditional breakpoint= 给普通的断点,加上条件判断- 条件判断添加方式- Xcode图形界面:断点的Condition中加上判断语句=表达式=expression=expr
- lldb命令行:加断点时,加上-c <expr>==--condition <expr>- 语法breakpoint set --name <function_name> -c <expr>- 说明- -c <expr>- 特殊:如果<expr>中包含双引号",则最外层用单引号'- 举例br s -n "objc_alloc_init" -c '(bool)[NSStringFromClass($x0) isEqualToString: @"AADeviceInfo"]'
 
- 举例
 
- 特殊:如果
- 参数引用- $x0:引用寄存器- x0的值
 
 
 
- 说明
 
- 语法
 
- Xcode图形界面:断点的
- 引用值 = 条件判断的断点中引用对应的值的写法- 寄存器:$x0、$x1、$x2等等- 适用于:任何地方,包括普通函数和某个地址(某行汇编代码)
 
- 参数:第一个参数:$arg1、第二个参数:$arg2、第三个参数:$arg3,等等- 适用于:普通函数(才有参数)
 
 
- 寄存器:
 
- 条件判断添加方式
更改判断条件
如果之前已给断点加了条件判断,而想要去更改条件:
- Xcode图形界面:右键某断点-》Edit Breakpoint-》直接修改Condition的值即可
- lldb命令行- 核心思路:用br modify -c <new_expr>
 
- 核心思路:用
lldb中更改条件判断
举例说明:
lldb命令行中,之前加了带条件判断的断点:
br s -n "objc_alloc_init" -c '(bool)[NSStringFromClass($x0) isEqualToString: @"AADeviceInfo"]'
加了后,对应的断点编号是:3
(lldb) br list
...
3: name = 'objc_alloc_init', locations = 1, resolved = 1, hit count = 19
Condition: (bool)[NSStringFromClass($x0) isEqualToString: @"AADeviceInfo"]
  3.1: where = libobjc.A.dylib`objc_alloc_init, address = 0x000000019cbd3c3c, resolved, hit count = 19
此处:想要修改该断点的condition条件判断
具体写法是:用modify
br modify 3  -c '(int)strcmp((char *)class_getName($x0),"AADeviceInfo")==0'
修改后,再去查看,即可看到:
(lldb) br list
...
3: name = 'objc_alloc_init', locations = 1, resolved = 1, hit count = 26
Condition: (int)strcmp((char *)class_getName($x0),"AADeviceInfo")==0
  3.1: where = libobjc.A.dylib`objc_alloc_init, address = 0x000000019cbd3c3c, resolved, hit count = 26
- condition已经变成新设置的条件了:- Condition: (int)strcmp((char *)class_getName($x0),"AADeviceInfo")==0
 

