【发布时间】:2012-04-02 02:21:17
【问题描述】:
我正在尝试解决 iOS 中的“发送到已释放实例的消息”错误。
【问题讨论】:
-
使用仪器,它会为您提供这些信息。
-
@Richard,使用 Zombie 工具可以帮助您进行调试,但有时在 gdb 中了解 malloc 的历史是很不错的。
-
如果 Instruments 没有锁机就好了
我正在尝试解决 iOS 中的“发送到已释放实例的消息”错误。
【问题讨论】:
查看 LLDB-GDB 命令映射 (http://lldb.llvm.org/lldb-gdb.html) - 您必须导入一个脚本,该命令现在名为 malloc_info。显然,malloc 堆栈日志仍然需要在 scheme options 中开启。
(lldb) script import lldb.macosx.heap
(lldb) malloc_info --stack-history 0x10010d680
不幸的是,它没有显示 dealloc - GDB 的 malloc-history 是否也显示了这一点?
【讨论】:
(lldb) script import lldb.macosx.heap >>> "crashlog" 和 "save_crashlog" 命令安装,使用 "--help" 选项获取详细帮助 "malloc_info", "ptr_refs", "cstr_refs", “find_variable”和“objc_refs”命令已安装,请使用这些命令的“--help”选项获取详细帮助。
使用仪器,你会得到准确的线 -
(在 XCode 中)通过“产品”->“配置文件”运行它。
这将启动 Instruments,您应该在此处选择“Zombies”并重现错误事件。
当僵尸被召唤时,您会看到一个弹出窗口,按下 V 形查看确切的线条。
问题通常是一个糟糕的__bridge(可选网桥__brige_retained/__bridge_transfer/__bridge)
【讨论】:
您曾经能够在 shell 中使用 malloc_history 命令行工具,并为其提供感兴趣的进程 ID 和地址。最新的 Xcode 命令行工具似乎不再安装此命令。 :-(
【讨论】: