在glDrawArrays()上调试SIGKILL。iPhone iOS

7
我希望有人能够帮助我弄清楚发生了什么事情。
我正在使用开发一款iPhone游戏。偶尔会出现< SIGKIL >信号导致我的代码停止。如果我按下“继续”按钮,游戏就可以正常继续进行。 控制台日志很清晰(没有错误或警告信息)。 我在自定义类上得到这个信号,该类使用绘制纹理矩形。 这段代码每秒执行约300次,我只在1-2小时内大约遇到一次。
以下是代码片段:
glColor4f(1.f, 1.f, 1.f, 1.f);
i = 1;
glBindTexture(GL_TEXTURE_2D, curText);
glVertexPointer(2, GL_FLOAT, 0, screenCoord [i]);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoord [i]);            
SIGKIL -->  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

以下是该时刻数组的内容:

(gdb) p *screenCoord[1]@8
$8 = {0, 296, 249.827072, 296, 0, -0, 249.827072, -0}
(gdb) p *textureCoord[1]@8
$12 = {0.456224144, 0.29296875, 0.700195312, 0.29296875, 0.456224144, 0.58203125, 0.700195312, 0.58203125}

堆栈跟踪:

#0  0x123028a7 in <????> ()
#1  0x12301528 in <????> ()
#2  0x0a767092 in gldRenderFillPolygonPtr ()
#3  0x12300185 in <????> ()
#4  0x0a55c3e1 in gleDrawArraysOrElements_ExecCore ()
#5  0x0a555280 in glDrawArrays_IMM_Exec ()
#6  0x01522c7c in glDrawArrays ()
#7  0x0007e6bd in -[CLScrollingBack draw] at /MyProjects/_ROBOTS/RobotsAttack/AbductedAliens game template/CLScrollingBack.m:430
#8  0x001bfdaa in -[CCNode visit] ()
#9  0x001bfd7d in -[CCNode visit] ()
#10 0x001bfd7d in -[CCNode visit] ()
#11 0x0020f708 in -[CCDirectorIOS drawScene] ()
#12 0x00211bb4 in -[CCDirectorDisplayLink mainLoop:] ()

日志中的最后一行是:
2012-06-20 13:05:27.368 RobotsAttack![9487:207] cocos2d: CCSpriteBatchNode: resizing TextureAtlas capacity from [2] to [4].
2012-06-20 13:05:27.368 RobotsAttack![9487:207] cocos2d: CCSpriteBatchNode: resizing TextureAtlas capacity from [4] to [6].
Current language:  auto; currently objective-c

我希望有人能告诉我如何调试这种情况并确定发生了什么。

不,我只希望它只在使用xCode时出现,并不会影响真正的玩家。因为我总是在连接到xCode的设备上进行调试时遇到这个问题。 - Marmot
2
我很少遇到这种情况,只有在Xcode模拟器上运行时偶尔会出现。但是我从来没有在设备上遇到过崩溃,尽管测试时通常不会将设备连接到Xcode。因此,我的想法也是与Xcode有关。 - jsherk
在连接到XCode的模拟器上运行时遇到了相同的问题。[CCNode visit]和glDrawArrays()停止工作。这也可能是cocos2d-iphone的bug。 - Ivan Mir
我也遇到了在cocos2d和(iPad)模拟器中随机陷入调试器的问题。我只是咒骂一下然后点击继续。我认为这可能与Xcode有关,尽管在非OpenGL游戏中我没有遇到过这种情况。 - David Dunham
我也看到过这个问题。糟糕。在真实设备上从未发生过。 - Colin Cornaby
1个回答

0

你可能已经知道了,当应用程序需要在不发生应用程序“崩溃”的情况下终止时,iOS 会发送 SIGKILL。一个明显的例子是当用户双击主屏幕并按下应用程序上的红色减号来终止它。

如果应用程序使用过多的内存,也会发送 SIGKILL。确保记录内存警告并查看是否在收到 SIGKILL 之前收到警告。如果是内存问题,只意味着您需要进行一些清理或者有一个内存泄漏(通过使用工具轻松解决)。

此外,可能只是 Xcode 出现了问题... 它并不完美,因此尝试在关闭 xcode 的情况下在模拟器上运行并查看是否仍然会崩溃。


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