LLDB中相当于GDB的"info malloc-history <address>"命令的是什么?

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

使用工具可以提供这些信息。 - Richard J. Ross III
2
@Richard,使用Zombie工具可以帮助您调试,但有时在gdb中了解malloc的历史记录也很有用。 - Sonny Saluja
如果Instruments没有锁住机器,那就好了。 - Bradley Thomas
3个回答

44

请查看LLDB-GDB命令映射(http://lldb.llvm.org/lldb-gdb.html) - 您需要导入一个脚本,现在该命令的名称为malloc_info。显然,在方案选项中仍需打开malloc堆栈日志记录。

(lldb) script import lldb.macosx.heap
(lldb) malloc_info --stack-history 0x10010d680

很不幸,它没有显示dealloc的内容 - GDB的malloc-history也能显示出来吗?


当我查看链接页面时,它显示这些命令仅适用于Mac OS X。 - Walt Sellers
5
对我而言,第一行必须是“command script import lldb.macosx.heap”,否则控制台会报告“error: 'malloc_info' is not a valid command.”(Mac OS)。 - Shaun Budhram
(lldb)脚本导入lldb.macosx.heap >>>已安装“crashlog”和“save_crashlog”命令,请使用“--help”选项获取详细帮助。 已安装“malloc_info”、“ptr_refs”、“cstr_refs”、“find_variable”和“objc_refs”命令,请在这些命令上使用“--help”选项获取详细帮助。 - Zeus

2
使用工具,您将得到精确的行 -
(在XCode中)通过“产品” ->“配置文件”运行它。
这将启动Instruments,在那里您应该选择“Zombies”并重现错误事件。
一旦调用了zombie,您将获得一个弹出窗口,请按下chevron以查看确切的行。
问题通常是不良的__bridge(可选桥__brige_retained / __bridge_transfer / __bridge)。

我没有看到确切的那一行。我可能做错了什么? - lwdthe1
@lwdthe1 在Xcode输出中,您可以看到发送消息的已释放类 - 这将为您提供有关已释放实例的提示。 - Avishay Cohen

0

以前你可以从 shell 使用 malloc_history 命令行工具,并给它感兴趣的进程 ID 和地址。看起来最新的 Xcode 命令行工具不再安装此命令了。:(


malloc_history 已安装并在我的 Xcode 4.6.3 上工作。 - manylegged

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接