ios - "memory history"命令到底是什么?

标签 ios xcode address-sanitizer

总结:我收到消息:

AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use it in the 'memory history' command.

什么是“内存历史记录”命令,我该如何使用它?

详细信息:

  • 我有一些代码有内存警告,导致崩溃。
  • 我通过“编辑方案”>“运行”>“启用地址 sanitizer ”打开了地址 sanitizer 。
  • 打开它并再次运行相同的代码后,崩溃不再发生,但出现了消息。

这是什么意思,内存历史命令到底是什么?我该如何使用它?我进行了搜索,但没有找到任何可以回答我问题的内容。

最佳答案

在 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
    ...

它甚至适用于已经解除分配的对象,它还显示解除分配回溯!当您不小心访问已释放的对象时,这非常有用。

关于ios - "memory history"命令到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36275098/

相关文章:

iPhone 核心数据对多关系和取消对子对象的编辑

ios - facebook swift sdk 0.2.0 swift 3.1 登录页面保持打开状态

c++ - 如何确定 UBSAN 是否已使用 clang 或 gcc 编译?

ios - 如何在每个显示文本的触摸按钮后打印空格

ios - UICollectionView 第一次使用 Swift 水平对齐滚动第一个单元格中心对齐不完全放置中心位置

ios - 对 AVSpeechSynthesizer 语音的输出语音应用过滤器?

ios - 使用 CocoaPods 安装的库的正确方法是什么?

ios - 链接器命令失败并显示退出代码(没有此类模块)

c++ - LeakSanitizer : get run time leak reports?