48

我的 iOS 应用程序有一个大问题:它有时会崩溃而没有详细的调试错误。堆栈跟踪为空。这些是堆栈跟踪中仅有的两行:

  1. UIApplicationMain 中的崩溃开始于“符号存根:-[_UIHostedTextServiceSessiondismissTextServiceAnimated:]”。
  2. 并报告“libsystem_c.dylib`malloc_error_break”。

com.apple.main-thread.

Xcode 调试器上的错误(连接设备):

malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

我已经使用 libsystem_c.dylib 在 malloc_error_break 中设置了一个断点,而没有来自调试器的任何反馈。我不知道要解决这个问题。

4

4 回答 4

49

要找到问题的根源,在 Xcode 中转到 Product > Scheme > Edit Scheme,然后在 Diagnostics 选项卡下启用所有 Malloc 设置和 Guard Malloc。

这样,再次运行您的应用程序,Xcode 将停在导致问题的行。

方案定义

于 2014-03-14T23:23:43.750 回答
28

由于您在调试器中,因此您应该查看内存位置0x208a7614并查看其中的内容。内存中的数据可能有助于找出问题所在。

发生的情况是以下之一:

  1. 你正在释放一个对象两次,

  2. 您正在释放一个从未分配过的指针

  3. 您正在通过一个无效指针写入,该指针先前指向一个已被释放的对象

由于堆栈跟踪是空的,因此在不同位置向代码中添加一些调试日志语句可能会很有用,以查看是否可以缩小代码中问题所在的范围。使用 Instruments 中的记忆工具也可能会有所帮助。您可以尝试打开 NSZombies,但这看起来像是 C 分配问题,而不是 Objective-C 问题。

此外,在崩溃之前还有其他内容写入控制台吗?如果是这样,它可能会指出问题出在哪里。

于 2013-11-07T16:22:30.607 回答
2

嗨,伙计们,如果您使用的是 nib 或 xib 界面,并且当您想要推送 viewcontroller 对象时遇到此问题,那么我已经找到了此解决方案,那么有时会发生此错误并且您的应用程序将崩溃(特别是 iPad 中的错误)这是解决方案:

// 像这样的格式

UINavigationController *nav=[[UINavigationController      alloc]initWithRootViewController:yourViewControllerObj];

[self.navigationController  presentViewController:nav animated:true completion:nil];

不要试图在这种情况下推动。

于 2016-12-17T11:33:18.710 回答
0

如果你有这个问题。转到:产品->方案->诊断->然后启用mollic gaurd 边缘僵尸对象 然后关闭然后转到产品->停止然后再次产品构建并运行。祝你好运

于 2019-03-28T15:31:06.340 回答