调试时出现EXC_BAD_ACCESS (code=1, address=0x0)错误

33
我的应用程序每次尝试跳过调用时都会崩溃。没有调试器它可以正常工作。
此外,当我在模拟器中运行应用程序时,无论是否使用调试器都可以正常工作。
最近我将我的Mac OS X 10.8升级到10.9(Mavericks)。升级之前没有任何问题。
是什么导致了这个问题,我该如何解决?
以下是回溯信息。我的应用程序使用ARC。我已启用僵尸对象检测,并添加了异常断点,但未检测到僵尸对象,也未触发异常断点。
    * thread #1: tid = 0x2503, 0x00000000, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
        frame #0: 0x00000000
        frame #1: 0x35e170c4 UIKit`-[UIApplication sendAction:to:from:forEvent:] + 72
        frame #2: 0x35e17076 UIKit`-[UIApplication sendAction:toTarget:fromSender:forEvent:] + 30
        frame #3: 0x35e17054 UIKit`-[UIControl sendAction:to:forEvent:] + 44
        frame #4: 0x35e1690a UIKit`-[UIControl(Internal) _sendActionsForEvents:withEvent:] + 502
        frame #5: 0x35e16e00 UIKit`-[UIControl touchesEnded:withEvent:] + 488
        frame #6: 0x35d3f5f0 UIKit`-[UIWindow _sendTouchesForEvent:] + 524
        frame #7: 0x35d2c800 UIKit`-[UIApplication sendEvent:] + 380
        frame #8: 0x35d2c11a UIKit`_UIApplicationHandleEvent + 6154
        frame #9: 0x37a1e5a2 GraphicsServices`_PurpleEventCallback + 590
        frame #10: 0x37a1e1d2 GraphicsServices`PurpleEventCallback + 34
        frame #11: 0x33ef9172 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34
        frame #12: 0x33ef9116 CoreFoundation`__CFRunLoopDoSource1 + 138
        frame #13: 0x33ef7f98 CoreFoundation`__CFRunLoopRun + 1384
        frame #14: 0x33e6aebc CoreFoundation`CFRunLoopRunSpecific + 356
        frame #15: 0x33e6ad48 CoreFoundation`CFRunLoopRunInMode + 104
        frame #16: 0x37a1d2ea GraphicsServices`GSEventRunModal + 74
        frame #17: 0x35d80300 UIKit`UIApplicationMain + 1120
        frame #18: 0x000faac8 MyApp`main(argc=1, argv=0x2fd0fd08) + 116 at main.m:16

编辑:

我有最新的Xcode版本5.0.1(5A2053)。

我从头开始创建了一个新的应用程序,并且成功运行。然后我在ViewControllerviewDidLoad中设置了一个断点,尝试跳过它。在这里我又遇到了另一个崩溃。

* thread #1: tid = 0x2503, 0x3bb9d7c4 libobjc.A.dylib`objc_msgSendSuper2 + 4, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x4)
    frame #0: 0x3bb9d7c4 libobjc.A.dylib`objc_msgSendSuper2 + 4
    frame #1: 0x000b913a test`-[ViewController viewDidLoad](self=0x1cda5c70, _cmd=0x361bd5db) + 62 at ViewController.m:19
    frame #2: 0x35d4b594 UIKit`-[UIViewController loadViewIfRequired] + 364
    frame #3: 0x35d8bd78 UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 64
    frame #4: 0x35d87aec UIKit`-[UIWindow _setHidden:forced:] + 364
    frame #5: 0x35dc91e8 UIKit`-[UIWindow makeKeyAndVisible] + 60
    frame #6: 0x35d8c83e UIKit`-[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1666
    frame #7: 0x35d8484a UIKit`-[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 698
    frame #8: 0x35d2cc38 UIKit`-[UIApplication handleEvent:withNewEvent:] + 1004
    frame #9: 0x35d2c6cc UIKit`-[UIApplication sendEvent:] + 72
    frame #10: 0x35d2c11a UIKit`_UIApplicationHandleEvent + 6154
    frame #11: 0x37a1e5a2 GraphicsServices`_PurpleEventCallback + 590
    frame #12: 0x37a1e1d2 GraphicsServices`PurpleEventCallback + 34
    frame #13: 0x33ef9172 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34
    frame #14: 0x33ef9116 CoreFoundation`__CFRunLoopDoSource1 + 138
    frame #15: 0x33ef7f98 CoreFoundation`__CFRunLoopRun + 1384
    frame #16: 0x33e6aebc CoreFoundation`CFRunLoopRunSpecific + 356
    frame #17: 0x33e6ad48 CoreFoundation`CFRunLoopRunInMode + 104
    frame #18: 0x35d83484 UIKit`-[UIApplication _run] + 668
    frame #19: 0x35d80300 UIKit`UIApplicationMain + 1120
    frame #20: 0x000b93bc test`main(argc=1, argv=0x2fd51d30) + 116 at main.m:16
    frame #21: 0x3bfd9b20 libdyld.dylib`start + 4

编辑2:

XCode 5 Crashes while running the app on device中,Greg Clayton建议如下:

Others have seen this issue.
A few things to try:
1 - Reboot your device and try again. The theory is an old developer disk image is already mounted and won't be unmounted until you reboot.
2 - Re-install the OS on the device

Hopefully #1 fixes your issue. Others have done #2 and had their issue fixed, but hopefully it doesn't require an OS re-install.

我两个都试过了,但没有帮助。 我尝试使用另一台设备,它有所改善。 如果我使用iOS 6.1的iPod Touch,则仍然存在异常,但使用iOS 7.0.2的iPad正常工作。 因此,问题似乎与设备上安装的iOS版本有关。 我仍然不确定该怎么做才能解决它。 编辑3:我的命令行工具版本与我的Xcode版本匹配(实际上我只有一个版本的命令行工具)。 问题可能与正在调试的代码无关。 它会崩溃并在跨越微不足道的代码时崩溃,这是由Xcode创建的新创建的Single View Application引起的。
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

我在苹果开发者论坛上询问,并从Jason Molenda那里得到以下回复:

我们正在追踪一个听起来像你在这里看到的bug。这是一个微妙的时间问题,需要稍微慢一点的主机或稍微慢一点的设备才能击中它。主要是iPhone 4和类似设备在iOS 7下会出现这种情况。在iOS 6下,iPhone 4和iPhone 3GS设备最有可能遇到这个问题。...这个问题只会在Xcode 5.0.1中发生。

所以,看起来这是Xcode的一个bug。


你也更新到最新的Xcode版本了吗? - DarkDust
@DarkDust 是的,我做了。 - Bobrovsky
1
我猜你在苹果开发者论坛上得到答案的机会更大,有时候苹果工程师可以提供帮助。我怀疑普通开发人员对这个问题无法提供帮助。 - DarkDust
同样的事情也发生在我身上。除了我没有得到堆栈跟踪。我尝试启用僵尸进程,但是我什么都没有得到。 - Fervus
@Bobrovsky Xcode > 首选项 > 位置 > 命令行工具。这是一个下拉菜单。确保版本与您使用的Xcode匹配。 - Tommie C.
显示剩余6条评论
3个回答

23

好的,这绝对是Xcode 5.0.1中的一个错误。

Jason Molenda在Apple开发者论坛上确认了这一点。现在唯一的解决方法是使用旧版Xcode和旧版Mac OS X,因为Xcode 5需要OS X 10.8.4。

目前没有关于解决此问题的公告时间表。在Apple开发者论坛上直接提问有关公告时间表的问题并未得到答复。

更新于2013年11月6日:

今天,developer.apple.com上发布了Xcode 5.0.2的预发布版本。该版本修复了以下问题(以及其他问题):

在运行iOS 6.x的设备上调试应用程序会导致应用程序崩溃并出现EXC_BAD_ACCESS。 这个问题已经解决。(15310896)

我已经安装了新版本,问题确实解决了。现在我可以再次在我的6.x设备上调试应用程序了。

Jason Molenda在Apple开发者论坛的主题帖中说:

我被告知你可以使用这个Xcode 5.0.2种子提交应用程序到应用商店。


2
这个问题已经在最新的Xcode种子版本(5.0.2)中得到了修复。"在运行iOS 6.x的设备上调试应用程序会导致应用程序崩溃并出现EXC_BAD_ACCESS错误。这个问题已经得到解决。(15310896)" - Jameo

3

3
我确认我也遇到了同样的问题。我的应用程序一直运行良好,在升级到Xcode 5和Mavericks之后,代码仍然能够工作,但是当我调试时,我无法跨越某些行,因为我会遇到EXC_BAD_ACCESS错误。
所以我必须记住不能通过Step Over的行,并在这些行之后设置断点或使用Continue to Line来跳过这些有问题的行。
PS
下载了Xcode 5.0.2 GM seed,调试效果要好得多。我目前已经花了30分钟尝试新的Xcode。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接