调试时修改变量 e
使用如下命令e或expr可以修改变量值
e self.ttt = 3
e username = @ "username"
expr还能新声明变量,如下所示
expr int $b=2
p $b
调试时执行语句 call
call [self.view setBackgroundColor:[UIColor redColor]]
其实使用p,po,call都可以调用方法,只是p和po都是用于输出的有返回值的。call一般只在不需要显示输出,或是方法无返回值时使用。
p [self.view setBackgroundColor:[UIColor redColor]]
p (void)[CATransaction flush]
打印堆栈 bt
打印调用堆栈,加all可打印所有thread的堆栈。不详细举例说明,感兴趣的朋友可以自己试试。
打印视图层次
po [self.contentView recursiveDescription]
修改方法返回值
thread return NO/YES
监听某个方法的调用
http://www.iosxxx.com/images/xcode/1.gif
系统方法就要如图所示,x86_64系统中,rdi表示第一个参数,具体其他平台可看inspecting-obj-c-parameters-in-gdb,里面有详细的说明
$rdi ➡ arg0 (self)
$rsi ➡ arg1 (_cmd)
$rdx ➡ arg2
$rcx ➡ arg3
$r8 ➡ arg4
$r9 ➡ arg5
image寻址,找到崩溃行
有些时候crash 不会告诉你crash在哪一行,需要我们去查,如下代码
NSArray *arr=[[NSArray alloc] initWithObjects:@"1",@"2", nil];
NSLog(@"%@",arr[2]);
crash日志如下
0 CoreFoundation 0x0000000110e8b1e6 __exceptionPreprocess + 294
1 libobjc.A.dylib 0x0000000110520031 objc_exception_throw + 48
2 CoreFoundation 0x0000000110ecb0bc _CFThrowFormattedException + 194
3 CoreFoundation 0x0000000110f3d750 +[__NSArrayI allocWithZone:] + 0
4 A 0x000000010fc20381 -[ViewController viewWillAppear:] + 273
5 UIKit 0x00000001114b1d60 -[UIViewController _setViewAppearState:isAnimating:] + 442
6 UIKit 0x00000001114b25cf -[UIViewController __viewWillAppear:] + 131
7 UIKit 0x00000001114b3e28 -[UIViewController viewWillMoveToWindow:] + 757
8 UIKit 0x00000001113bec1e -[UIView(Hierarchy) _willMoveToWindow:withAncestorView:] + 655
9 UIKit 0x00000001113d03fc -[UIView(Internal) _addSubview:positioned:relativeTo:] + 453
10 UIKit 0x000000011137a4d5 -[UIWindow addRootViewControllerViewIfPossible] + 1068
先找到非系统bug的崩溃地址,在我们这里就是
4 A 0x000000010fc20381 -[ViewController viewWillAppear:] + 273
然后调用image lookup --address 0x000000010fc20381
得到结果如下所示
Address: A[0x0000000100001381] (A.__TEXT.__text + 417)
Summary: A`-[ViewController viewWillAppear:] + 273 at ViewController.m:30
symbol
添加指定的方法为断点,比如添加一个 viewDidLoad Symbol
如果你要添加某个特定类的实例方法,可以用 -[类名 实例方法名] 。类方法是+[类名 方法名]
unrecognized selector send to instancd 快速定位
在Symbolic中填写如下方法签名 -[NSObject(NSObject) doesNotRecognizeSelector:]
Ref
http://www.iosxxx.com/blog/2015-06-30-xcodediao-shi-(ru-men-pian)chang-yong-ming-ling.html
https://juejin.im/entry/5a1679fff265da43085db1a5