【问题标题】:LLDB equivalent to GDB's "info malloc-history <address>" command?LLDB 相当于 GDB 的“info malloc-history <address>”命令?
【发布时间】:2012-04-02 02:21:17
【问题描述】:

我正在尝试解决 iOS 中的“发送到已释放实例的消息”错误。

【问题讨论】:

  • 使用仪器,它会为您提供这些信息。
  • @Richard,使用 Zombie 工具可以帮助您进行调试,但有时在 gdb 中了解 malloc 的历史是很不错的。
  • 如果 Instruments 没有锁机就好了

标签: ios xcode lldb


【解决方案1】:

查看 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 是否也显示了这一点?

【讨论】:

  • 当我查看链接页面时,它显示这些命令“仅在 Mac OS X 上可用”
  • 对我来说,第一行必须是'command script import lldb.macosx.heap',否则控制台会报告'error: 'malloc_info' is not a valid command。' (Mac 操作系统)
  • (lldb) script import lldb.macosx.heap >>> "crashlog" 和 "save_crashlog" 命令安装,使用 "--help" 选项获取详细帮助 "malloc_info", "ptr_refs", "cstr_refs", “find_variable”和“objc_refs”命令已安装,请使用这些命令的“--help”选项获取详细帮助。
【解决方案2】:

使用仪器,你会得到准确的线 -

(在 XCode 中)通过“产品”->“配置文件”运行它。

这将启动 Instruments,您应该在此处选择“Zombies”并重现错误事件。

当僵尸被召唤时,您会看到一个弹出窗口,按下 V 形查看确切的线条

问题通常是一个糟糕的__bridge(可选网桥__brige_retained/__bridge_transfer/__bridge

【讨论】:

  • 我不太清楚确切的路线。我可能做错了什么?
  • @lwdthe1 您可以在 Xcode 输出中看到消息发送到的已释放类 - 它会为您提供有关已释放实例的提示。
【解决方案3】:

您曾经能够在 shell 中使用 malloc_history 命令行工具,并为其提供感兴趣的进程 ID 和地址。最新的 Xcode 命令行工具似乎不再安装此命令。 :-(

【讨论】:

  • malloc_history 已安装并为我工作,使用 xcode 4.6.3。
猜你喜欢
  • 2012-08-25
  • 2022-01-11
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2012-11-01
  • 2017-01-08
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多