• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:40:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在 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 命令?

提前感谢您的回答。



Best Answer-推荐答案


您是在做 p/x $r1 是因为您需要暂时保留 $r1 的值(value),还是只是想查看它的值(value)?如果是后者,你可以使用:

(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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap