【问题标题】:Help debugging iPhone app - EXC_BAD_ACCESS帮助调试 iPhone 应用程序 - EXC_BAD_ACCESS
【发布时间】:2010-01-07 22:47:59
【问题描述】:

我已经使用我的 3G 设备开发了我的应用程序进行测试。把它交给朋友测试后,他注意到它崩溃了。我查看了崩溃日志,但除了几次内存警告后的“EXC_BAD_ACCESS”语句之外,它并没有多大用处。

在我的设备上,我可以多次使用 imagePicker,每次拍照时都会收到内存警告,但这不会导致任何问题。

在我朋友的设备(也是 3G)上,从相机中选择了几张图像后,应用程序崩溃了。

所以,我的问题是......我认为由于内存警告,某些东西正在被释放 - 但仅在我朋友的设备上,然后在释放后,它试图再次使用。如何找出正在调用的对象?我不能使用 NSZombies,因为这是一个远程(测试版)设备。

请帮忙!

另外,如果有人知道为什么我的设备可以毫无问题地挑选一张又一张的图像,而他却不能……那将是最有帮助的

谢谢!

编辑:新发现..我也收到此错误消息:KERN_PROTECTION_FAILURE,据我了解与数据访问有关。崩溃似乎发生在我保存从 UIImagePicker 获取的图像之后。有什么想法吗?

【问题讨论】:

  • 可能是图像选择器委托。有可能你已经发布了吗?您的朋友仍然可以发送崩溃日志。在 google 上搜索如何使用 iTunes 获取它们以及如何符号化。
  • 我想我还没有发布它。我只是在 didFinishPickingMediaWithInfo 委托方法中关闭了选择器。虽然也许我应该在解雇选择器之前使用返回的“信息”?目前我先关闭选择器,然后使用返回的图像

标签: iphone debugging memory-management uiimagepickercontroller exc-bad-access


【解决方案1】:

您可能过度发布某些内容。如果您正在运行 Snow Leopard,请运行静态分析器 (Cmd-Shift-A) 并查找内存错误。

它在内存错误后崩溃的事实表明 UIViewController 已经释放了它的视图。您是否有任何 UIViewControllers 观察 NSNotifications,或者在它们不在屏幕时可能会更改它们的 IBOutlets?这是此类崩溃的常见原因。确保您是correctly memory managing your IBOutlets。 UIViewControllers 不应该在它们离开屏幕时与它们的 IBOutlets(或它们的 UI 组件)混淆。即使你没有犯这个错误,如果你没有按照上面链接中的说明实现,你仍然可能在内存警告后崩溃。

MemoryWarning 是一个非常好的主意,并且情况有所改善,但 Apple 仍然没有完全解决它如何与 UIViewController 一起使用的所有问题。开发者仍然需要非常小心。

【讨论】:

  • 嗨。我尝试了静态分析器,没有出现错误。实际上,除了窗口底部的“成功”消息之外,什么都没有发生。很奇怪。
  • 没那么奇怪。只是意味着你没有明显的错误。管理不善的 IBOutlets 不会被 clang 捕获,也不会被释放对象的通知。
  • 从我的日志文件中我可以看到以下内容。这是否意味着 [PictureView clearPage] 出现问题?异常类型:EXC_BAD_ACCESS (SIGBUS) 异常代码:KERN_PROTECTION_FAILURE at 0x0000000f 崩溃线程:0 线程 0 崩溃:0 libobjc.A.dylib 0x00003ebc objc_msgSend + 20 1 MyApp 0x0000378a -[PictureView clearPage] (PictureView.m>79)
  • 当然;查看 PictureView.m 中的第 79 行,查看取消引用的指针。它将是您要向其发送消息的那个(因为它在 objc_msgSend 中失败)。
【解决方案2】:

您应该让您的朋友来到您的计算机并使用 NSZombieEnabled 运行它。这是调试这些问题的最佳方式。

【讨论】:

  • 是的,这就是我想做的,但这几乎是不可能的。有没有办法记录这样的事情?
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多