【Xcode】Memory Graph Debugger

image.png
  • 内存泄漏示例
截屏2022-02-24 下午4.05.23.png
  • 俩种打开方式
image-20220224162723160.png
  • 观察BlockView和MemoryLeakControl数量为2,发生内存泄漏
image-20220224164016992.png
  • 点击图表中的MemoryViewController,可以看到有Block持有控制器
image-20220224164050123.png
  • 点击Block, 可以获取到内存地址,Backtrace可以通过Malloc Stack Logging打开


    image-20220224164116923.png
image-20220224164221865.png
  • 打开后定位相关方法
image-20220224164345290.png
  • 也可以dis -s 地址查看
    作用是用来反汇编某个地址所对应符号信息以及开始一部分的汇编实现,这里加16的意思是因为Block对象的内部偏移16个字节的位置就是Block对象所保存的执行代码的函数地址

(lldb) dis -s *(void**)(0x7fc56a06fd50+16)
TestOC`__35-[MemoryLeakController viewDidLoad]_block_invoke:
    0x100830b00 <+0>:  pushq  %rbp
    0x100830b01 <+1>:  movq   %rsp, %rbp
    0x100830b04 <+4>:  subq   $0x40, %rsp
    0x100830b08 <+8>:  movq   %rdi, -0x8(%rbp)
    0x100830b0c <+12>: movq   %rdi, %rax
    0x100830b0f <+15>: movq   $0x0, -0x10(%rbp)
    0x100830b17 <+23>: leaq   -0x10(%rbp), %rcx
    0x100830b1b <+27>: movq   %rdi, -0x20(%rbp)

参考文章

你可能感兴趣的:(【Xcode】Memory Graph Debugger)