ios - LLDB 评估在 iOS 上耗尽内存。我怎样才能释放一些内存?

标签 ios debugging memory memory-management lldb

在 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) 的事情吗?是否有任何“ secret ”的 lldb 命令?

预先感谢您的回答。

最佳答案

您执行 p/x $r1 是因为您需要临时保留 $r1 的值,还是您只是想查看它的值?如果是后者,您可以使用:

(lldb) register read/x r1

可以缩短为:

(lldb) re r/x r1

即直接打印寄存器而不构造临时寄存器。同样,如果您只想查看局部变量的值:

(lldb) frame variable foo

将打印 foo 的值而不通过完整的表达式解析器。

请注意,当前的 lldb 中还有一个错误,导致表达式分配的内存比它们需要的多得多——1500 个表达式太少了,即使在 32 位系统上也不会真正耗尽内存。 . 这已在 lldb.llvm.org 源中修复,但我不知道修复何时会进入发布。

目前没有办法告诉 lldb 不要创建或丢弃这些方便的变量。没有理由不能这样做,只是没有必要这样做。

关于ios - LLDB 评估在 iOS 上耗尽内存。我怎样才能释放一些内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250069/

相关文章:

ios - 应用程序被锁定 malloc -> OSSpinLockLock$VARIANT$mp

ios - XCode 如何在没有付费开发帐户的情况下存档和导出

apache-flex - 为什么 Flex 调试在带有断点的 Firefox 6 中一段时间​​后停止工作?

java - 如何从插件访问 Eclipse Java 调试器?

ios - UIImagePickerController 不会从/tmp/capture 中删除临时视频捕获文件

java - 分配大的新字符串时如何使用更少的内存

ios - x代码 7 : linker command failed with exit code 1 (use -v to see invocation)

c# - Web.Config 调试/发布 : Doesn't work

c++ - 虚拟内存地址空间不足(Borland C++ Builder 6 程序)

ios - 音频流播放: unable to change play/stop button image