- 内存泄漏示例
- 俩种打开方式
- 观察BlockView和MemoryLeakControl数量为2,发生内存泄漏
- 点击图表中的MemoryViewController,可以看到有Block持有控制器
-
点击Block, 可以获取到内存地址,Backtrace可以通过Malloc Stack Logging打开
image-20220224164116923.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)
网友评论