gpt4 book ai didi

ios - 在设备而非模拟器上崩溃时解释回溯

转载 作者:行者123 更新时间:2023-12-02 01:30:16 26 4
gpt4 key购买 nike

我的应用程序在 iPhone 4 上运行时会崩溃,但在模拟器上运行时不会崩溃。我想这是因为我使用的内存超出了允许的范围。

我不知道错误消息。错误只是 (lldb),当我点击 bt 时,我得到下面的代码...

如果有人告诉我如何开始理解这个错误消息,我将非常感激,因为对我来说就像中国人(当然我不是中国人)

(lldb) bt
* thread #1: tid = 0x7396a, 0x37db5ce2 libsystem_platform.dylib`OSSpinLockLock$VARIANT$up + 2, queue = 'com.apple.spritekit.textureOp, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x37db5ce2 libsystem_platform.dylib`OSSpinLockLock$VARIANT$up + 2
frame #1: 0x2fa9da68 SpriteKit`SKSpinLockSync(int*, void () block_pointer) + 92
frame #2: 0x2fa63a48 SpriteKit`-[SKTexture loadImageData] + 300
frame #3: 0x2fa6735a SpriteKit`-[SKTexture load] + 126
frame #4: 0x37c79d06 libdispatch.dylib`_dispatch_client_callout + 22
frame #5: 0x37c8be72 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 26
frame #6: 0x2fa672ae SpriteKit`-[SKTexture _loadOnTextureQueue] + 122
frame #7: 0x2fa98cf0 SpriteKit`SKCSprite::prepareForRendering() const + 1168
frame #8: 0x2faaaf0c SpriteKit`SKCRenderer::preprocessSpriteImp(std::__1::vector<SKCRenderer::SpriteRenderInfo, std::__1::allocator<SKCRenderer::SpriteRenderInfo> >&, SKRenderQuadPool&, SKCSprite const*, _GLKMatrix4 const&, float, unsigned int&, bool) const + 124
frame #9: 0x2faab9a4 SpriteKit`SKCRenderer::preprocessSpriteImp(std::__1::vector<SKCRenderer::SpriteRenderInfo, std::__1::allocator<SKCRenderer::SpriteRenderInfo> >&, SKRenderQuadPool&, SKCSprite const*, _GLKMatrix4 const&, float, unsigned int&, bool) const + 2836
frame #10: 0x2faa73b4 SpriteKit`SKCRenderer::preprocessAndSubmitSpriteInternal(std::__1::vector<SKCRenderer::SpriteRenderInfo const*, std::__1::allocator<SKCRenderer::SpriteRenderInfo const*> >&, std::__1::vector<SKCRenderer::SpriteRenderInfo, std::__1::allocator<SKCRenderer::SpriteRenderInfo> >&, SKRenderQuadPool&, SKCSprite const*, _GLKMatrix4 const&) + 52
frame #11: 0x2faa5e7c SpriteKit`SKCRenderer::preprocessAndSubmitSprite(SKCSprite const*, _GLKMatrix4 const&) + 152
frame #12: 0x2faa973e SpriteKit`SKCRenderer::submitScene(SKScene*) + 186
frame #13: 0x2faabf5c SpriteKit`SKCRenderer::renderScene(SKScene*) + 148
frame #14: 0x2fa71120 SpriteKit`-[SKView _renderContent] + 1072
frame #15: 0x37c79d06 libdispatch.dylib`_dispatch_client_callout + 22
frame #16: 0x37c8be72 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 26
frame #17: 0x2fa70cc2 SpriteKit`-[SKView renderContent] + 82
frame #18: 0x2fa6e662 SpriteKit`__29-[SKView setUpRenderCallback]_block_invoke + 130
frame #19: 0x2fa90dda SpriteKit`-[SKDisplayLink _callbackForNextFrame:] + 254
frame #20: 0x00216a66 libglInterpose.dylib`-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 270
frame #21: 0x2f8509ce QuartzCore`CA::Display::DisplayLinkItem::dispatch() + 98
frame #22: 0x2f850778 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 344
frame #23: 0x3243576c IOMobileFramebuffer`IOMobileFramebufferVsyncNotifyFunc + 104
frame #24: 0x2e0e8a74 IOKit`IODispatchCalloutFromCFMessage + 248
frame #25: 0x2d3c6e20 CoreFoundation`__CFMachPortPerform + 136
frame #26: 0x2d3d19de CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34
frame #27: 0x2d3d197a CoreFoundation`__CFRunLoopDoSource1 + 346
frame #28: 0x2d3d014e CoreFoundation`__CFRunLoopRun + 1398
frame #29: 0x2d33ac26 CoreFoundation`CFRunLoopRunSpecific + 522
frame #30: 0x2d33aa0a CoreFoundation`CFRunLoopRunInMode + 106
frame #31: 0x32019282 GraphicsServices`GSEventRunModal + 138
frame #32: 0x2fbde048 UIKit`UIApplicationMain + 1136
frame #33: 0x00067b5c superBeeLand`main(argc=1, argv=0x27dbbc64) + 116 at main.m:16
(lldb)

最佳答案

我终于找到了这个问题的答案。嗯,第一个线索是错误是 EXC_BAD_ACCESS。这几乎总是意味着我试图访问没有对象的内存。也许是一个损坏的指针,或者一个对象消失了(被释放或丢失了对其的引用)。

沿着轨迹继续下去,它似乎与纹理加载以某种方式相关。所以我开始查看我尝试加载/预加载纹理、创建 Sprite 等的任何地方。但看起来它可能位于预渲染/渲染循环内,这可能意味着不是我显式加载纹理,而是 Sprite Kit尝试在需要时动态加载纹理。

我尝试删除一些 Sprite ,直到它不崩溃,以缩小问题的范围,最后我发现这是我的英雄 Action 。对于他的动画,我使用 @propertie int _imgNum ; 并将其添加到 [NSString stringWithFormat:@"image%d",_imgNum]; 所以 _imgNum 是图像的编号。我在场景开始时初始化 _imgNum,并在每次使用它时递增它(在 didSimulatePhysics()touchedMovedWithEvent() 中)。有时应用程序找不到图像,就会崩溃,但我仍然不明白为什么无法加载图像。我会更好地展示代码。

        if(_imgNum >= 1 && _imgNum <= 12 )
{
[[self childNodeWithName:@"hero"]runAction:[SKAction setTexture:[SKTexture textureWithImageNamed:[NSString stringWithFormat:@"heroRunnning%d",_imgNum]]]];
_imgNum++;
if(_imgNum >= 12)
{
_imgNum = 1;
}
}

关于ios - 在设备而非模拟器上崩溃时解释回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com