Depuración de SIGKILL en glDrawArrays(). iPhone iOS
opengl-es (1)
Espero que alguien pueda ayudarme a descubrir qué está pasando.
Estoy desarrollando un juego para iPhone usando el cocos2d framework
. De vez en cuando SIGKIL
mi código detenido debido a la señal SIGKIL
. Si presiono el botón "continuar", el juego continúa sin problemas. El registro de la consola es claro (no hay mensajes de error o advertencia) Lo obtengo en mi clase personalizada que dibuja un rectángulo texturizado usando OpenGL
. Este código se ejecuta unas 300 veces por segundo y obtengo SIGKILL
solo una vez cada 1-2 horas.
Aquí hay un fragmento de código:
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);
Aquí está el contenido de las matrices en ese momento:
(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}
Stack trace:
#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:] ()
Las últimas líneas en el registro son:
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
Le agradecería si alguien me puede decir cómo depurar esta situación y determinar qué está pasando.
Probablemente sepa esto, pero SIGKILL es enviado por iOS cuando la aplicación debe finalizar sin un "bloqueo" en la aplicación. Un ejemplo obvio de esto es cuando el usuario toca dos veces en el inicio y presiona el menos rojo en la aplicación y la finaliza.
SIGKILL también se puede enviar si la aplicación usa demasiada memoria. Asegúrese de registrar las advertencias de memoria y ver si recibe la advertencia antes de recibir SIGKILL. Si se trata de memoria, solo significa que tiene que hacer algunas tareas de limpieza o tiene una fuga de memoria en algún lugar (se soluciona fácilmente con los instrumentos).
Además, podría ser que Xcode sea poco convincente ... Es un sistema menos que perfecto, así que intente jugar en el simulador mientras xcode está cerrado y vea si todavía se cuelga en usted.