iOS小技巧

2020-01-04  本文已影响0人  半边枫叶
、LLDB查看寄存器内容:

register read,然后就会打印出如下类似内容。

(lldb) register read
General Purpose Registers:
       rax = 0x000000010113e160
       rbx = 0x0000000000000000
       rcx = 0x001d8001000024fe
       rdx = 0x0000000000000000
       rdi = 0x000000010113e160
       rsi = 0x000000010113e160
       rbp = 0x00007ffeefbff5c0
       rsp = 0x00007ffeefbff5a0
        r8 = 0x001d800100002429
        r9 = 0x0000000101100000
       r10 = 0x0000000000000002
       r11 = 0x00000001003ced50  libobjc.A.dylib`::-[NSObject init]() at NSObject.mm:2308
       r12 = 0x0000000000000000
       r13 = 0x0000000000000000
       r14 = 0x0000000000000000
       r15 = 0x0000000000000000
       rip = 0x00000001000017ad  LGTest`main + 77 at main.m:25
    rflags = 0x0000000000000206
        cs = 0x000000000000002b
        fs = 0x0000000000000000
        gs = 0x0000000000000000

(lldb) 
、instrumentObjcMessageSends打印系统底层方法的调用信息。
instrumentObjcMessageSends(true);
[student saySomething];
instrumentObjcMessageSends(false);

我们像上面的代码一样来使用instrumentObjcMessageSends方法,这样系统就会打印出instrumentObjcMessageSends方法底层的调用信息。这些信息可以在我们电脑的/tmp目录中找到对应的文件。
因为instrumentObjcMessageSends是C语言函数,如果要在外部使用,需要在我们使用的地方加上下面这句代码

extern void instrumentObjcMessageSends(BOOL flag);

然后就可以像下面这样快乐的使用了

extern void instrumentObjcMessageSends(BOOL flag);

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        LGStudent *student = [LGStudent alloc] ;
        instrumentObjcMessageSends(true);
        [student saySomething];
        instrumentObjcMessageSends(false);
    }
    return 0;
}

找到/tmp目录下对应的日志文件,内容如下


image.png
上一篇下一篇

猜你喜欢

热点阅读