Debug 技巧(汇编层面)

2019/1/20 posted in  iOS

在Xcode中调试代码 一般都使用po 和 p命令,但是还是一种方法就是进入到汇编语言 debug。这时候就会用到了 lldb 的一个指令叫寄存器读。

register read // 寄存器读

1.怎么开启汇编语言 debug

首先Xcode 菜单栏 debug 如下图所示选择 debug workflow

屏幕快照 2019-03-27 上午10.43.57

然后选择然后选择第一项总是显示汇编窗口

屏幕快照 2019-03-27 上午10.47.06

2.那么进入到指定的汇编断点之后应该如何打印信息呢

屏幕快照 2019-03-27 上午10.49.12

使用register read 就会把具体的信息给打印出来
如下所示,还可以具体使用 register read rsp 等打印出来逐条的信息,不过意义不是特别大,因为register read已经可以把所有信息打印出来

(lldb) register read
General Purpose Registers:
       rax = 0x0fc228d768f90060
       rbx = 0x00000001088ebc05  "count"
       rcx = 0x0000000000000111
       rdx = 0x00000001167855c0  dyld`_main_thread
       rdi = 0x00007fcf0bc0b300
       rsi = 0x00000001074a8971  "sayHello"
       rbp = 0x00007ffee87549f0
       rsp = 0x00007ffee8754970
        r8 = 0x000000010a5203a0  libsystem_pthread.dylib`_pthread_keys
        r9 = 0x0000000000000040
       r10 = 0x0000000000000000
       r11 = 0x0000000000000202
       r12 = 0x0000000000000018
       r13 = 0x00007fcf0bc0b300
       r14 = 0x000000010c37b9e4  UIKitCore`_UIApplicationLinkedOnVersion
       r15 = 0x0000000107ddbd80  libobjc.A.dylib`objc_msgSend
       rip = 0x00000001074a8341  ExchangeMethod`-[ViewController mwviewDidLoad] + 465 at ViewController.m:87
    rflags = 0x0000000000000206
        cs = 0x000000000000002b
        fs = 0x0000000000000000
        gs = 0x0000000000000000

利用image list命令列出所有image,第一个image就是我们APP的偏移值,也就是内存地址。