美文网首页
iOS小技巧

iOS小技巧

作者: 半边枫叶 | 来源:发表于2020-01-04 20:03 被阅读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

    相关文章

      网友评论

          本文标题:iOS小技巧

          本文链接:https://www.haomeiwen.com/subject/fzjfactx.html