2012-06-20 3 views
7

누군가가 내가 무슨 일이 일어나는지 알아낼 수 있기를 바랍니다.glDrawArrays()에서 SIGKILL 디버깅. iPhone iOS

나는 cocos2d framework을 사용하여 iPhone 게임을 개발 중입니다. 때로는 SIGKIL 신호 때문에 코드가 멈추는 경우가 있습니다. '계속'버튼을 누르면 게임이 계속 진행됩니다. 콘솔 로그가 깨끗합니다 (오류 또는 경고 메시지가 없음) OpenGL을 사용하여 텍스처 라이즈 사각형을 그리는 사용자 정의 클래스에서이 코드를 가져옵니다. 이 코드는 초당 약 300 회 실행되며 SIGKILL은 1-2 시간마다 약 한 번만 발생합니다.

(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:]() 

마지막 라인 여기

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); 

그 순간에 배열의 내용입니다 : 여기

코드의 조각 로그는 다음과 같습니다 :

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 

누군가이 상황을 디버깅하고 진행 상황을 판단 할 수 있다면 감사하게 생각합니다.

+0

혹시 이것을 알아 냈습니까? – jsherk

+0

아니요. 단지 xCode로 작업하면서 실제 플레이어에게 영향을주지 않기를 바랍니다. xCode에 연결된 장치로 디버깅하는 동안 나는 항상 그것을 가지고 있기 때문에. – Marmot

+2

Xcode의 시뮬레이터에서 실행되는 경우가 종종 있습니다. 하지만 나는 장치에서 나를 충돌시키지 않았지만, 테스트 할 때 일반적으로 장치를 Xcode에 연결하지 않습니다. 그래서 내 생각은 어떻게 든 Xcode와 관련이있다. – jsherk

답변

0

아마 알겠지만, 응용 프로그램에서 "충돌"없이 응용 프로그램을 종료해야하는 경우 SIGKILL이 iOS에서 전송됩니다. 분명한 것은 사용자가 집을 두 번 탭하고 앱의 빨간색 빼기를 누른 다음 종료하는 경우입니다.

응용 프로그램이 너무 많은 메모리를 사용하는 경우 SIGKILL을 보낼 수도 있습니다. 메모리 경고를 기록하고 SIGKILL을 받기 전에 경고를 받았는지 확인하십시오. 기억이 있다면, 당신은 당신이해야 할 일을 정리하거나 어딘가에 메모리 누수가 있다는 것을 의미합니다 (악기를 사용하여 쉽게 해결할 수 있습니다).

또한 Xcode가 불안정 할 수도 있습니다. 완벽한 시스템이 아니므로 xcode가 닫혀있는 동안 시뮬레이터에서 재생 해보고 여전히 충돌이 있는지 확인하십시오.