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。应用程序在设备上运行
Alamofire 3.0 - iOS 9.1 上的 EXC_BAD_ACCESS