2012-06-20 108 views
7

我希望有人能幫我弄清楚發生了什麼。在glDrawArrays()上調試SIGKILL。 iPhone iOS

我使用cocos2d framework開發的iPhone遊戲。由於SIGKIL信號,我不時收到代碼。如果我按「繼續」按鈕,遊戲繼續沒有任何問題。 控制檯日誌是明確的(沒有錯誤或警告消息) 我得到它在我的自定義類,使用OpenGL繪製一個矩形紋理的。 該代碼每秒執行約300次,我每0123小時只得到SIGKILL約一次。

這裏是一段代碼:

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

這裏是陣列的那一刻的內容:

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

在最後幾行日誌是:

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是封閉的,看看它是否仍然在你崩潰。