gpt4 book ai didi

iphone - 获取有关 LLDB 中错误内存地址的信息

转载 作者:行者123 更新时间:2023-12-03 18:17:24 26 4
gpt4 key购买 nike

我正在尝试在我的 iPhone 应用程序中调试 EXC_BAD_ACCESS。它在方法调用时崩溃,并且该方法的行是 EXC_BAD_ACCESS (code=1, address = xxx)

以前,我只会使用 gdb info malloc-history <xxx>开始调试,但我在 LLDB 中找不到并行命令。

我看到了this线程说要使用 Instruments,但是当我这样做时,我仍然会崩溃,但我无法弄清楚如何准确判断应用程序在 Instruments 中的何处崩溃。

我只需要弄清楚这 block 正在崩溃的内存指向哪里。使用 LLDB 执行此操作的最佳方法是什么?或仪器?

最佳答案

如果使用仪器进行调试,您可以看到 malloc 堆栈。

我遇到了和你一样的问题,并且同样想知道如何在使用 lldb 时获取 malloc 历史记录。遗憾的是我没有找到像 gdb 中的 malloc-history 这样的漂亮命令。老实说,我刚刚切换了调试器,但我发现这很烦人,因为我觉得我不应该这样做。

使用工具查找 malloc 历史记录:

  1. 介绍您的项目
  2. 从工具列表中选择“僵尸” enter image description here
  3. 让您的应用触发问题
  4. 此时,您应该会看到已经释放的地址,您可以探索它。 enter image description here此时查看 malloc 历史记录应该是一件简单的事情。我涂掉了那些特定于我正在做的工作的类/项目名称的部分,但我认为如何获取这些信息的本质和有用性是存在的。

最后一句话

我遇到的问题产生了如下消息:

*** -[someClass retain]: message sent to deallocated instance 0x48081fb0 someProject(84051,0xacd902c0) malloc: recording malloc stacks to disk using standard recorder

我真的很困惑这个 retain 是从哪里来的,因为它所中断的代码没有(不在它所在行的 getter 或 setter 中)。事实证明,当某个对象被dealloc'ed时,我没有调用removeObserver:forKeyPath:。后来在执行过程中,KVO 对一行上的 setter 进行了 do,这导致了程序崩溃,因为 KVO 试图通知一个已经被释放的对象。

关于iphone - 获取有关 LLDB 中错误内存地址的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9853100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com