EXC_BAD_ACCESS 在设备中,不在模拟器中

Posted

技术标签:

【中文标题】EXC_BAD_ACCESS 在设备中,不在模拟器中【英文标题】:EXC_BAD_ACCESS in device, not in simulator 【发布时间】:2012-02-10 09:20:15 【问题描述】:

我在我的项目中实施了 adwhirl。我以前在我的项目中实现过它,所以我只是将它从我以前的项目中合并到我当前的项目中。

- (UIViewController *)viewControllerForPresentingModalView 

  return self;

我在以前的项目中使用过这个。因为我的 window.rootvviewcontroller 是 self only。但是在我当前的项目中,我在很多屏幕上展示广告,所以我使用了:

- (UIViewController *)viewControllerForPresentingModalView 
    
      return return [[(AppDelegate *)[[UIApplication sharedApplication] delegate] window] rootViewController] ;;
    

主要问题是程序崩溃了,现在仍然如此。起初一切正常:iads 测试广告加载,但很少崩溃。我很快就明白这是因为 Admob。它很少崩溃,因为大部分时间没有加载 admob 广告。

现在搜索这些崩溃时,我发现了一点,因为我在 Xcode 4.2 中制作了项目,而不是在我之前的项目 Xcode 4.0 中制作了我的窗口和视图控制器中的强大属性。我删除了它。

现在问题出在模拟器中,它不会崩溃,但会在设备中崩溃。

错误是在我将 adview 添加为子视图 并且 - (UIViewController *)viewControllerForPresentingModalView 已通过此功能 但在 adWhirlDidReceiveAd 方法之前。

实际的崩溃是[GADRequestPrivate spamSignals] EXC_BAD_ACCESS。

【问题讨论】:

为什么用android标签标记问题? 因为它在 Admob 中崩溃了,我相信 android 用户会比 ios 开发者对 Admob 有更多的了解.. 【参考方案1】:

下面的答案已经为我赢得了赏金:) .....你可以尝试解决你的问题......

链接:Getting to the bottom of crash

我找到了调试崩溃代码的最佳方法之一。按照调试技术的链接:

http://www.cocoadev.com/index.pl?DebuggingAutorelease

您需要非常仔细地分析您的控制台,才能真正了解崩溃发生的原因。这对我几乎所有未启用 ARC 的代码都有帮助。

【讨论】:

我会知道这样的任何错误..这与调试无关..我已按照 adwhirl 的教程进行操作..它正在正确加载 iAds..但在 Admob 中它会因特定原因而崩溃错误..所以只有 Adwhirl APi 内部可能有问题..我希望有人可能知道...同样的事情在我的其他应用程序中正常工作...进一步 ..Admob API 实现文件被锁定..so我什至不知道在这个过程中实际发生了什么。 如果你说在其他应用程序中它工作正常......那么它一定只是你的编码有问题......所以只有尝试使用这种方式......并获得最后一个堆栈跟踪和分析解决方案......祝你好运【参考方案2】:

我建议您分析您的项目并寻找内存泄漏和僵尸。似乎您正在向已释放的对象发送一条消息,这会导致无效的内存访问。僵尸检测无法在设备上运行,但您可以在模拟器上运行。看看Xcode Instruments - Enable NSZombie Detection? Where is it?

希望对你有帮助。

【讨论】:

这就是问题..我肯定会使用僵尸..但它不能在设备上运行并且崩溃不在模拟器中......!......该死,......我的运气:D 可以在模拟器上运行。它还将检测僵尸。模拟器不会崩溃,因为它有很多内存并且不需要覆盖你的僵尸内存。该设备的内存要少得多并且崩溃,因为您的僵尸正在使用的内存被其他应用程序覆盖,从而导致无效访问。请原谅我的英语不好。【参考方案3】:

即使这发生在专有的 Adwhirl 代码中,您也可以通过打开指定的所有调试标志(例如,How to break on __NSAutoreleaseNoPool)来学到很多东西。这个答案讨论了很多调试标志,而不仅仅是自动释放池的。

【讨论】:

以上是关于EXC_BAD_ACCESS 在设备中,不在模拟器中的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 模拟器启动时的 EXC_BAD_ACCESS。应用程序在设备上运行

长按 EXC_BAD_ACCESS;没有僵尸活动

Alamofire 3.0 - iOS 9.1 上的 EXC_BAD_ACCESS

CGContextStrokePath 在 iOS > 5 中触发 EXC_BAD_ACCESS [重复]

iAd 显示在模拟器中,但不在设备上

WebView 在模拟器中加载但不在设备中