2012-06-20 20 views
7

Umarım birileri bana neler olduğunu anlamaya yardım edebilir.glDrawArrays() üzerinde SIGKILL hata ayıklama. iPhone iOS

cocos2d framework numaralı telefonu kullanan bir iPhone oyunu geliştiriyorum. Zaman zaman SIGKIL sinyali nedeniyle kodumu durduracağım. “Devam” butonuna basarsam oyun herhangi bir sorun olmadan devam eder. Konsol günlüğü temiz (hata veya uyarı iletisi yok) OpenGL'u kullanarak tekstüre dikdörtgen çizimi çizen özel sınıfımda anladım. Bu kod, saniyede yaklaşık 300 kez yürütülür ve SIGKILL'u yalnızca 1-2 saatte bir kez alır.

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

Yığın izleme: içinde

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

son satırları İşte

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

o an üzerinde Dizilerin içeriği: Burada

kod parçasıdır log:

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 

Birisi bana bu durumun nasıl hatalarını ayıklayacağını ve neler olup bittiğini anlatabileceğini söylerse minnettar olurum.

+0

Bunu hiç anladın mı? – jsherk

+0

Hayır. Sadece xCode ile çalışırken ve gerçek oyuncuları etkilemeyeceğini umuyorum. XCode'a bağlı cihazda hata ayıklama yaparken her zaman var. – Marmot

+2

Çok zaman zaman Xcode'daki simülatörlerde çalışırken anladım. Ancak, test ederken Xcode'a bağlı cihazı genellikle bırakmamam da, bir cihazda asla çökmemesine rağmen. Bu yüzden düşüncelerim de Xcode ile ilgili. – jsherk

cevap

0

Muhtemelen bunu biliyorsunuz, ancak uygulamanın uygulamada bir "kilitlenme" olmadan sonlandırılması gerektiğinde SIGKILL, iOS tarafından gönderilir. Bunun bir örneği şudur: Kullanıcı eve iki kez dokunduğunda ve uygulamadaki kırmızı eksi değerine bastığında ve bunu sonlandırdığında gerçekleşir. Uygulama çok fazla bellek kullanıyorsa, SIGKILL de gönderilebilir. Bellek uyarılarını kaydettiğinizden emin olun ve SIGKILL'i almadan önce uyarı alıp almadığınızı kontrol edin. Eğer hafızadaysa, sadece bir miktar temizleme yapmanız gerektiği veya bir yere bir bellek sızıntısı yapmanız gerektiği anlamına gelir (enstrümanları kullanarak kolayca çözülür).

Ayrıca, Xcode kazanma şansı da olabilir ... Mükemmel bir sistemden daha azdır, bu yüzden xcode kapalıyken simülatörde çalmayı deneyin ve hala üzerinde çöküp çökmediğine bakın.

İlgili konular