总结:我收到了消息:
AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use it in the 'memory history' command.
什么是“memory history
”命令,以及我该如何使用它?
详细说明:
这意味着什么,以及内存历史命令究竟是什么?我该如何使用它?我已经搜索过,但是我找不到任何能回答我问题的内容。
答案 0 :(得分:5)
在Address Sanitizer下运行,可以查看对象的分配方式。 memory history
命令需要一个指针/地址,它将显示该对象的分配方式(分配的历史堆栈跟踪):
(lldb) po self
<MasterViewController: 0x61800000e080>
(lldb) memory history 0x61800000e080
thread ... name = 'Memory allocated at'
frame #0: 0x00000001051bba97 libclang_rt.asan_iossim_dynamic.dylib`wrap_calloc + 199
frame #1: 0x00000001064362fd libobjc.A.dylib`class_createInstance + 84
frame #2: 0x0000000106440dc7 libobjc.A.dylib`_objc_rootAlloc + 41
frame #3: 0x00000001072d6d25 UIKit`-[UIClassSwapper initWithCoder:] + 175
frame #4: 0x00000001074c731b UIKit`UINibDecoderDecodeObjectForValue + 683
...
它甚至适用于已经解除分配的对象,它还显示了释放回溯!当您意外访问已经释放的对象时,这非常有用。