2012-06-20 8 views
7

Ich hoffe, jemand kann mir helfen, herauszufinden, was vor sich geht.Debugging von SIGKILL auf glDrawArrays(). iPhone iOS

Ich entwickle ein iPhone-Spiel mit cocos2d framework. Von Zeit zu Zeit bekomme ich meinen Code gestoppt wegen SIGKIL Signal. Wenn ich auf "Weiter" klicke, wird das Spiel ohne Probleme fortgesetzt. Das Konsolenprotokoll ist gelöscht (keine Fehler- oder Warnmeldungen) Ich bekomme es auf meiner benutzerdefinierten Klasse, die ein texturiertes Rechteck mit OpenGL zeichnet. Dieser Code wird etwa 300 Mal pro Sekunde ausgeführt und ich bekomme SIGKILL nur etwa einmal pro 1-2 Stunden.

ist hier ein Stück Code:

(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} 

Stapelüberwachung:

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

Die letzten Zeilen in der

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

Hier wird der Inhalt von Arrays auf diesem Moment ist log sind:

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 

Ich wäre dankbar, wenn mir jemand sagen könnte, wie ich diese Situation debuggen und feststellen kann, was vor sich geht.

+0

Haben Sie das jemals herausgefunden? – jsherk

+0

Nein. Ich hoffe nur, dass es nur während der Arbeit mit xCode ist und keinen Einfluss auf reale Spieler haben wird. Da habe ich es immer beim Debuggen mit Gerät an xCode angeschlossen. – Marmot

+2

Ich bekomme es sehr gelegentlich, wenn ich in den Simulatoren auf Xcode laufe. Aber ich hatte noch nie einen Absturz bei mir auf einem Gerät, obwohl ich das Gerät beim Testen normalerweise nicht mit Xcode verbunden lasse. Also meine Gedanken sind auch, dass es irgendwie mit Xcode zu tun hat. – jsherk

Antwort

0

Sie wissen das wahrscheinlich, aber SIGKILL wird von iOS gesendet, wenn die Anwendung ohne einen "Absturz" in der App beendet werden muss. Ein naheliegendes Beispiel hierfür ist, wenn der Benutzer nach Hause klopft und das rote Minuszeichen der App drückt und beendet.

SIGKILL kann auch gesendet werden, wenn die Anwendung zu viel Arbeitsspeicher verwendet. Stellen Sie sicher, dass Sie Speicherwarnungen protokollieren und sehen Sie, ob Sie die Warnung erhalten, bevor Sie die SIGKILL erhalten. Wenn es sich um Speicher handelt, bedeutet das nur, dass Sie etwas aufräumen müssen oder irgendwo ein Speicherleck haben (leicht gelöst mit den Instrumenten).

Auch könnte Xcode gerade wonky sein ... Es ist ein weniger als perfektes System, also versuchen Sie, auf dem Simulator zu spielen, während xcode geschlossen ist und sehen Sie, ob es immer noch auf Sie stürzt.