如何“在 malloc_error_break 中设置断点进行调试”
Posted
技术标签:
【中文标题】如何“在 malloc_error_break 中设置断点进行调试”【英文标题】:How to "set a breakpoint in malloc_error_break to debug" 【发布时间】:2012-12-12 06:49:29 【问题描述】:我得到了很多这样的控制台输出,而我的应用程序没有崩溃:
malloc: * 对象 0xc6a3970 的错误:未释放指针 已分配 * 在 malloc_error_break 中设置断点进行调试
如何找出受影响的对象或变量?
我尝试像这样设置一个符号断点,但它永远不会停止:
【问题讨论】:
我通过禁用 Safari 检查来解决这个问题。 ***.com/a/43885754/6521116 造成这种情况的原因之一是一个函数/方法应该返回一个对象,但它到达函数的末尾并且不返回任何内容。 【参考方案1】:通过打开断点导航器(视图->导航器->显示断点导航器或⌘8),单击左下角的加号按钮,然后选择“添加符号断点”,在 malloc_error_break() 上设置断点。在出现的弹出窗口中,在符号字段中输入malloc_error_break
,然后单击完成。
编辑:openfrog 添加了一个屏幕截图并表明他已经尝试了这些步骤但没有成功在我发布了我的答案之后。有了那个编辑,我不知道该说什么。我还没有看到自己无法正常工作,实际上我总是在 malloc_error_break 集上设置一个断点。
【讨论】:
这对我有用(没有模块)。对我来说问题的原因是我有一个文件支持的UIImage
,并且我用不同的图像覆盖了文件。当我在原始图像上调用 UIImagePNGRepresentation
时,这会导致错误(而不是在文件实际被覆盖时)。
⌘7
栏的左下角没有加号按钮...也许您的意思是 ⌘8
?
@ScottyBlades 猜测快捷方式已更改。我在 8 年和 7 个主要 Xcode 版本前写了这个答案......
@AndrewMadsen 不用担心,只是检查编辑是否有意义。
从 Xcode 12.4 开始,您可以通过以下方式获得它:Debug -> Breakpoints -> Create Synbolic Breakpoint (⌥ ⌘ \)【参考方案2】:
在您的屏幕截图中,您没有指定任何模块:尝试设置“libsystem_c.dylib”
我做到了,它有效:断点停在这里 (虽然堆栈跟踪通常来自一些不起眼的系统库......)
【讨论】:
ios 中的模块名好像不一样,是:libsystem_malloc.dylib
。断点对我有用,无需指定模块。【参考方案3】:
我在使用 Xcode 时遇到了同样的问题。我按照您提供的步骤进行操作,但没有成功。 我疯了,因为在我看到的每一个论坛中,这个问题的所有线索都是你提供的。 我终于看到我在 malloc_error_break 之后放了一个空格,我压制了它,现在它可以工作了。 一个愚蠢的问题,但如果解决方案不起作用,请确保您没有在 malloc_error_break 之前和之后放置任何空格。
希望此消息对您有所帮助..
【讨论】:
这个空间对我有用。我觉得很奇怪。【参考方案4】:我在某些文件夹(尤其是 /usr/bin/)中授予了我不应该写入的权限,这导致了问题。我通过打开磁盘工具并在 Macintosh HD 磁盘上运行“修复磁盘权限”来修复它。
【讨论】:
谢谢,这修复了我的破机器。【参考方案5】:我通过关闭 Safari 检查员来解决它。请参考我的post。当我运行我的应用程序进行测试时,有时我也会发现声音,然后我打开带有自动检查器的 safari,之后,我在我的应用程序中执行了一些操作,然后触发了这个问题。
【讨论】:
以上是关于如何“在 malloc_error_break 中设置断点进行调试”的主要内容,如果未能解决你的问题,请参考以下文章