【发布时间】:2014-10-04 16:22:40
【问题描述】:
在 iOS 的 LLDB 控制台中,我重复了
(lldb) p/x $r1
(unsigned int) $1 = 0x07000006
(lldb) p/x $r1
(unsigned int) $2 = 0x07000006
(lldb) p/x $r1
(unsigned int) $3 = 0x07000006
...etc
大约1500次,最后得到如下错误信息
error: Couldn't allocate space for the stack frame: Couldn't malloc: address space is full
Errored out in Execute, couldn't PrepareToExecuteJITExpression
据我了解,每次运行p/x $r1 时,调试器都会将$r1 评估为表达式,并在内存中为临时变量$N(其中N = 1, 2, 3, ...)分配一个缓冲区。大约 1500 次评估后,调试器内存不足,无法再分配缓冲区。
我的问题是如何释放一些内存?例如。如果我不再需要临时变量$1,我可以做类似free($1) 的事情吗?是否有任何“秘密” lldb 命令?
提前感谢您的回答。
【问题讨论】:
-
检查可用的空闲内存,也许你没有。如果是这种情况,终端中的 sudo purge 可能会有所帮助,它会释放一些内存。
-
我试试,谢谢!可能它会帮助释放一些未使用的内存。但是,我想知道如何释放分配的缓冲区,例如为
$1分配的缓冲区。类似free($1)。有什么想法吗? -
不幸的是,我不知道。我试图在这里找到一些东西(lldb.llvm.org/lldb-gdb.html),但没有看到任何相关的东西。
-
@Timur Kuchkarov,是的,我阅读了官方文档并没有找到任何像我需要的那样的 LLDB 命令。无论如何,谢谢你的回答:)
标签: ios debugging memory memory-management lldb