ios - 我的应用程序在我的 iPhone 上运行时崩溃,但在模拟器中没有。我可以使用哪些调试技术来解决问题?

标签 ios iphone xcode swift debugging

应用程序在 GameViewController 中的 viewDidLoad 右大括号处崩溃。我的 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)
  }

如果我注释掉创建、缩放和呈现 GameScene 的行,那么应用程序运行正常(在这种情况下它本质上是一个空白 View )。这告诉我,显然我的 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 类有问题有问题,有什么方法可以弄清楚到底是什么问题吗?还是我必须单独测试每个属性?

除此之外,事实证明当我不在调试器中运行该应用程序时,该应用程序在我的 iPhone 上运行良好。

编辑:问题已解决。这显然是 Xcode 的错误,而不是我的任何代码。 EXC_BAD_ACCESS at lauch for EAGLContext renderbufferStorage: fromDrawable: in Cocos2d app whie debugging

最佳答案

事实证明这是 xcode 的一个错误,而不是任何代码,如这个问题所示:EXC_BAD_ACCESS at lauch for EAGLContext renderbufferStorage: fromDrawable: in Cocos2d app whie debugging .

显然 EAGLcontext_renderBufferStorage 在 iOS 8.3+ 上会导致错误。解决方案是更改您用于禁用 GPU 帧捕获的方案。不完全确定为什么会这样,但确实如此!

关于ios - 我的应用程序在我的 iPhone 上运行时崩溃,但在模拟器中没有。我可以使用哪些调试技术来解决问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663030/

相关文章:

ios - 数组获得零 GCD

ios - 将基于 Objective-C 的委托(delegate)转换为 Swift

ios - 根据PageviewController调整containerView的高度

cookies - iPhone 主屏幕书签和持久 cookie

iphone - 显示连续模态视图的正确方法

xcode - 您的 Xcode 版本对于您的 iOS 版本来说可能太旧了

ios - 如何使用 AVFoundation 获取图像元数据?

iphone - 如何将自己的图像添加到 PhotoScroller 示例中?

iOS 自动布局 - 尽管设置了限制,但图像和屏幕顶部之间存在间隙

c++ - 如何让 Xcode 链接和调试带有 Boost 文件系统的应用程序?