【问题标题】:A way to view memory allocation in Xcode / lldbXcode/lldb中查看内存分配的一种方法
【发布时间】:2020-02-03 20:01:18
【问题描述】:

我有一个简单的程序并设置了一个断点来查看如何在调试界面中监控内存分配(例如,使用 valgrind):

上面的程序应该分配很多内存。左侧的“内存”图标似乎与动态内存分配无关(可能与 Xcode 本身使用的内存量有关)。是否有一个命令可以查看lldb 内分配了多少内存,例如类似于(gdb) call malloc_stats()?我知道有 Instruments 应用程序(我已经使用过),但我更感兴趣的是能够在调试时逐步了解总内存使用情况。或者,是否有一些 GUI 命令/面板可以显示这个?

【问题讨论】:

  • 你可能需要弄脏页面——给它们写点东西——以增加你的内存使用。尝试在分配中每 16k 编写一些内容。
  • @JasonMolenda -- “分配中的每 16k”是什么意思? memset 会适用于所有工作吗?或者我需要把这些文章分块。
  • 我认为他的意思是在您的“alloc”函数中,只需在返回时写入每个块 (s[0] = 'z')。内核可能很聪明,不会提交您尚未写入的内存分配。

标签: c xcode macos lldb


【解决方案1】:

内存量表确实反映了您的程序分配的内存。如果您按照 Jason 的建议进行操作,您会看到分配更多内存时会增加。

有几个命令:“memory region”和“malloc_info”,它们会告诉你分配历史或包含特定地址的内存状态。但是 lldb 没有通用的“显示所有分配的内存区域”命令,例如 malloc_stats。

您还可以使用 Xcode 的“Debug Memory Graph”按钮查看程序中的内存分配 - 包括所有 Malloc 块。

【讨论】:

  • 谢谢——你能告诉我“调试内存图”按钮在哪里或者如何访问/使用那个命令/按钮吗?
  • 它是调试控制栏上的一个空心三角形连接的三个圆圈的按钮 - 在步进控制之后的部分。如果要查看每个分配的堆栈,则需要在您正在调试的 Xcode Target 的 Run scheme 的 Diagnostics 选项卡中打开 Malloc Stack。它的文档在这里:developer.apple.com/library/archive/documentation/….
猜你喜欢
  • 2013-10-20
  • 2012-01-14
  • 2021-07-19
  • 2012-07-22
  • 1970-01-01
  • 2017-06-10
  • 2017-10-02
  • 2012-07-26
  • 1970-01-01
相关资源
最近更新 更多