我希望有人可以帮助我弄清楚发生了什么。

我正在使用cocos2d framework开发iPhone游戏。由于SIGKIL信号,我不时停止执行代码。如果我按“继续”按钮,游戏将继续进行,不会出现任何问题。
控制台日志已清除(无错误或警告消息)
我在使用OpenGL绘制纹理化矩形的自定义类上获得了它。
该代码每秒执行约300次,而我每1-2小时仅获得SIGKILL一次。

这是一段代码:

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

如果有人可以告诉我如何调试这种情况并确定发生了什么,我将不胜感激。

最佳答案

您可能知道这一点,但是当需要终止应用程序而应用程序中没有“崩溃”时,SIGKILL是由iOS发送的。一个明显的例子是,当用户双击主页并按下应用程序上的红色减号并终止它时。

如果应用程序使用过多的内存,也可以发送SIGKILL。在收到SIGKILL之前,请确保您正在记录内存警告,并查看是否收到警告。如果是内存,仅表示您需要进行一些清理或在某处内存泄漏(使用仪器即可轻松解决)。

另外,可能只是Xcode有点怪……这不是一个完美的系统,因此请在xcode关闭时尝试在模拟器上播放,看看它是否仍然崩溃。

10-08 09:23