我的应用程序在我的iPhone上运行时崩溃,但不在模拟器中。 我可以用什么debugging技术来解决这个问题?

该应用程序在GameViewControllerviewDidLoadGameViewController大括号崩溃。 我的viewDidLoad代码如下所示:

 override func viewDidLoad() { super.viewDidLoad() let scene = GameScene(size: CGSize(width: 768, height: 1024)) let skView = self.view as! SKView skView.showsFields = true skView.ignoresSiblingOrder = true skView.showsPhysics = true scene.scaleMode = .AspectFill skView.presentScene(scene) } 

如果我注释掉创build,缩放和呈现GameScene的行,那么应用程序运行良好(在这种情况下本质上是一个空白的视图)。 这告诉我,我的GameScene类中显然有一些事情发生,但我无法弄清楚是什么。

当我运行一个回溯,我得到这个:

  (lldb) bt * thread #1: tid = 0x1d9f18, 0x00000001002d5bac libglInterpose.dylib`EAGLContext_renderbufferStorageFromDrawable(EAGLContext*, objc_selector*, unsigned long, id<EAGLDrawable>) + 180, queue = 'com.apple.spritekit.renderQueue', stop reason = EXC_BAD_ACCESS (code=1, address=0x11f0) frame #0: 0x00000001002d5bac libglInterpose.dylib`EAGLContext_renderbufferStorageFromDrawable(EAGLContext*, objc_selector*, unsigned long, id<EAGLDrawable>) + 180 frame #1: 0x0000000189252468 SpriteKit`-[SKView remakeFramebuffer:] + 600 frame #2: 0x0000000189252e44 SpriteKit`-[SKView _setupContext] + 832 frame #3: 0x0000000189253700 SpriteKit`-[SKView _renderContent] + 112 frame #4: 0x00000001008a4f94 libdispatch.dylib`_dispatch_client_callout + 16 frame #5: 0x00000001008af08c libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 128 frame #6: 0x00000001892535a0 SpriteKit`-[SKView renderContent] + 100 frame #7: 0x0000000189254d24 SpriteKit`-[SKView layoutSubviews] + 564 frame #8: 0x00000001893dd760 UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 580 frame #9: 0x0000000188d25e1c QuartzCore`-[CALayer layoutSublayers] + 152 frame #10: 0x0000000188d20884 QuartzCore`CA::Layer::layout_if_needed(CA::Transaction*) + 320 frame #11: 0x0000000188d20728 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 32 frame #12: 0x0000000188d1febc QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 276 frame #13: 0x0000000188d1fc3c QuartzCore`CA::Transaction::commit() + 528 frame #14: 0x000000018966c838 UIKit`-[UIApplication _reportMainSceneUpdateFinished:] + 60 frame #15: 0x000000018966d71c UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 2804 frame #16: 0x000000018966b778 UIKit`-[UIApplication workspaceDidEndTransaction:] + 184 frame #17: 0x000000018d1a93c8 FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke_2 + 32 frame #18: 0x000000018495827c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20 frame #19: 0x0000000184957384 CoreFoundation`__CFRunLoopDoBlocks + 312 frame #20: 0x00000001849559a8 CoreFoundation`__CFRunLoopRun + 1756 frame #21: 0x00000001848812d4 CoreFoundation`CFRunLoopRunSpecific + 396 frame #22: 0x000000018944c43c UIKit`-[UIApplication _run] + 552 frame #23: 0x0000000189446fac UIKit`UIApplicationMain + 1488 * frame #24: 0x0000000100046804 Ascii Attack`main + 164 at AppDelegate.swift:11 frame #25: 0x000000019684aa08 libdyld.dylib`start + 4 (lldb) 

但不幸的是,我不知道从哪里去。 我真的不知道如何破译回溯。 我知道我的GameScene类有什么问题,有什么方法可以确切地说明什么? 还是我必须单独testing每个属性?

除此之外,事实certificate,当我不在debugging器中运行应用程序时,该应用程序在我的iPhone上正常运行。

编辑:问题已解决。 这显然是Xcode的一个错误,而不是我的任何代码。 EXC_BAD_ACCESS用于EAGLContext renderbufferStorage:fromDrawable:在Cocos2d应用程序中debugging

原来,这是一个错误,而不是任何代码,如在这个问题中看到的: EXC_BAD_ACCESS在EAGLContext的渲染renderbufferStorage:fromDrawable:在Cocos2d应用程序debugging 。

显然EAGLcontext_renderBufferStorage可能导致iOS 8.3+上的错误。 解决scheme是更改您正在使用的scheme来禁用GPU帧捕获。 不完全确定为什么这个工作,但它!