ios - LLDB 评估在 iOS 上内存不足。我怎样才能释放一些内存?
<p><p>在 iOS 的 LLDB 控制台中,我重复了</p>
<pre><code>(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
</code></pre>
<p>大约1500次,最后得到如下错误信息</p>
<pre><code>error: Couldn't allocate space for the stack frame: Couldn't malloc: address space is full
Errored out in Execute, couldn't PrepareToExecuteJITExpression
</code></pre>
<p>据我了解,每次运行 <code>p/x $r1</code> 时,调试器都会将 <code>$r1</code> 评估为表达式,并在内存中分配一个缓冲区临时变量 <code>$N</code>(其中 <code>N = 1, 2, 3, ...</code>)。大约 1500 次评估后,调试器内存不足,无法再分配缓冲区。</p>
<p>我的问题是如何释放一些内存?例如。如果我不再需要临时变量 <code>$1</code>,我可以执行 <code>free($1)</code> 之类的操作吗?是否有任何“ secret ” lldb 命令?</p>
<p>提前感谢您的回答。 </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您是在做 <code>p/x $r1</code> 是因为您需要暂时保留 $r1 的值(value),还是只是想查看它的值(value)?如果是后者,你可以使用:</p>
<pre><code>(lldb) register read/x r1
</code></pre>
<p>可以简写为:</p>
<pre><code>(lldb) re r/x r1
</code></pre>
<p>直接打印寄存器而不构建临时。同样,如果您只想查看局部变量的值:</p>
<pre><code>(lldb) frame variable foo
</code></pre>
<p>将打印 foo 的值而不经过完整的表达式解析器。</p>
<p>请注意,当前 lldb 中还有一个错误会导致表达式分配的内存比它们需要的多 - 1500 个表达式太少了,即使在 32 位系统上也不会真正耗尽内存。 . 这已在 lldb.llvm.org 源中修复,但我不知道修复何时会发布。</p>
<p>目前没有办法告诉 lldb 不创建或丢弃这些便利变量。没有理由不能这样做,只是没有必要。</p></p>
<p style="font-size: 20px;">关于ios - LLDB 评估在 iOS 上内存不足。我怎样才能释放一些内存?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/25250069/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/25250069/
</a>
</p>
页:
[1]