【问题标题】:double free*** set a breakpoint in malloc_error_break to debug in ARCdouble free*** 在 malloc_error_break 中设置断点以在 ARC 中调试
【发布时间】:2012-05-22 04:04:24
【问题描述】:

我在我的应用程序中使用 ARC 处理核心数据和线程等,在做了所有努力让核心数据与线程一起工作而没有任何崩溃之后,现在我遇到了一个新的崩溃,原因是 -

double free*** set a breakpoint in malloc_error_break to debug

我应该如何处理这个问题?我无法控制对象的保留计数。

【问题讨论】:

  • 这与对象的保留计数无关。此消息是 glibc 的内置错误消息之一。这个特别指出您已经在同一内存区域上明确使用了 free() 两次。
  • 不,我还没有做过 free() 或 malloc() 之类的事情。
  • 那么您能否提供更多调试信息?像更多的错误消息一样,也许你应该用 -g 编译并在 gdb 等中进行回溯。否则我们真的无能为力......
  • 设置推荐断点时,您的应用程序在哪里停止?这是代码的一个很好的区域,可以更仔细地检查。
  • @H2CO3 我如何得到你所说的回溯..

标签: iphone multithreading automatic-ref-counting autorelease double-free


【解决方案1】:

如果你想知道是谁破坏了分配:

按照信息提示进行简单的破坏会给你提供线索。

如果您想知道谁创建了分配:

虽然您也可以使用 malloc 堆栈日志从命令行执行此操作,但它可能是使用 Instruments 的更温和的介绍。在工具中启用分配记录的情况下运行程序,重现问题,然后在工具中查找双重释放的地址——它将向您显示分配创建的回溯。然后弄清楚为什么该分配被释放了两次。

【讨论】:

  • 能否分享为 malloc_error_break 添加断点的步骤?
  • @Gujamin 我怀疑你没有先搜索——我在堆栈溢出中输入了malloc_error_break。第一个结果回答了您的问题(逐步):stackoverflow.com/questions/6923853/…
  • 我已经按照这些步骤(添加了malloc_error_break 符号断点),但它并没有在我的代码中的任何地方停止并再次报告*** error: can't allocate region *** set a breakpoint in malloc_error_break to debug
【解决方案2】:
  1. 启用僵尸
  2. 点击此链接:http://iphone2020.wordpress.com/2012/02/23/capturing-exceptions-while-debugging/。这将提示确切的崩溃点。

【讨论】:

  • 仅用于测试目的。同时给构建删除参考!
  • 该链接似乎已关闭(从不加载)。您能否就需要做什么提供一些见解。我过去使用过僵尸,但没有那么广泛。 @NaveenThunga(谢谢!)
猜你喜欢
  • 2012-11-06
  • 2012-12-12
  • 2018-07-29
  • 2023-03-29
  • 2021-05-27
  • 1970-01-01
  • 2014-05-14
  • 2011-02-19
  • 1970-01-01
相关资源
最近更新 更多