2012-06-20 15 views
7

Espero que alguien pueda ayudarme a descubrir qué está pasando.Depuración de SIGKILL en glDrawArrays(). iPhone iOS

Estoy desarrollando un juego de iPhone usando cocos2d framework. De vez en cuando obtengo 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í es una pieza 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í es 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} 

Seguimiento de la pila:

#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 

Estaría agradecido si alguien me puede decir cómo depurar esta situación y determinar qué está pasando.

+0

¿Alguna vez descubrió esto? – jsherk

+0

No. Solo espero que sea solo mientras trabajo con xCode y no afectará a los jugadores reales. Como siempre lo tengo mientras estoy depurando con un dispositivo conectado a xCode. – Marmot

+2

Lo obtengo muy de vez en cuando, cuando se ejecuta en los simuladores en Xcode. Pero nunca me había topado en un dispositivo, aunque normalmente no dejo el dispositivo conectado a Xcode cuando lo pruebo. Así que mi pensamiento es que de alguna manera está relacionado con Xcode. – jsherk

Respuesta

0

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 está usando 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 aún se cuelga en usted.

Cuestiones relacionadas