2013-02-08 26 views
-1

我正在開發一個Cocos2d 2.0遊戲,無法安靜地解決爲什麼我的應用程序崩潰。Cocos2d,iOS和XCode:我如何調試/理解這個堆棧跟蹤?

控制檯輸出如下:

2013-02-08 10:52:08.298 AppName[994:15203] cocos2d: CCSpriteBatchNode: resizing TextureAtlas capacity from [29] to [40]. 
2013-02-08 10:52:08.299 AppName[994:15203] cocos2d: CCSpriteBatchNode: resizing TextureAtlas capacity from [40] to [54]. 
2013-02-08 10:52:08.300 AppName[994:15203] cocos2d: CCSpriteBatchNode: resizing TextureAtlas capacity from [54] to [73]. 
(lldb) 

「遊戲場景」立即加載和崩潰。我可以看到這與CCSpriteBatchNode有關,但我完全不知道代碼在哪裏出錯。如果我添加一個斷點,它沒有什麼用處,因爲它會在達到失敗的確切時刻之前觸發很多次。

(lldb)是什麼意思?有沒有辦法有更明確的堆棧跟蹤? 我曾經在Java和Eclipse中工作,並有可能用英文閱讀完整的堆棧跟蹤。我很喜歡使用XCode。

+1

啓用全局異常斷點在Xcode中獲得更多的細節。你發佈的內容不是堆棧跟蹤,並且這些消息與崩潰無關。 lldb ist只是調試器提示符(你可以在這裏輸入調試器命令) – LearnCocos2D

+0

我試圖按照https://devforums.apple.com/thread/68421中的說明啓用它們,但它導致同樣的崩潰,沒有人類可讀的日誌。我發現一篇文章談論Symbolicating(http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports)該應用程序,但我還沒有提交該應用程序呢..看來我需要一個存檔文件來分析它。 – mm24

回答

1

您可能正在使用那些令人討厭的EXC_BAD_ACCESS搜尋器。不,沒有例外。例如,

@try { 

//  this is caught 
//  NSMutableArray *ar = [NSMutableArray array]; 
//  [ar addObject:nil]; 

//  this is caught 
//  NSMutableDictionary *dic = [NSMutableDictionary dictionary] ; 
//  [dic setObject:@"a" forKey:nil]; 

// this crashes , no exception 
// NSLog("21"); 

// and this will cause a message sent to a dealloced instance (zombie). 
// no exception, just a bad crash. 

    GEIntEffect *eff = [GEIntEffect intEffectWithString:@"*1.1" 
               withOrder:geEffectOrderFightMagic 
               andImpact:geEffectImpactPositive]; 
    [eff release]; 
    NSLog([eff description]); 


    [[GameSpecs sharedGameSpecs] setupBattlesInitialSpecs]; 
    // with a comment 
} 

@catch (NSException *e) { 
    MPLOGERROR(@"*** an exception [%@] occured while writing the game specs, continuing.\n%@\n\n%@", 
    e.description, 
    e.callStackSymbols, 
    e.callStackReturnAddresses); 
} 

前兩個被捕獲,並且日誌語句是顯式的,將日誌中的堆棧跟蹤發送給我。 NSLog(「21」)... ooops,忘記了「@」嚴重崩潰。第四個例子,在使用之前錯誤地釋放一個對象......以及你知道那是什麼。我只能建議你:

  • 檢查所有的警告(我有一個在惡劣的NSLog)
  • 簡介您的應用程序的殭屍,使用的儀器。發送給一個被交易對象的消息也將崩潰。
  • 雖然存在性能損失,即不要過分執行,但一些戰略性放置的try/catch塊可以幫助極大。通常,我在Debug中包裝了任何'update'方法,刪除了Release中的try/catch。
  • 重新檢查所有的警告:)

好運。

ps:這是什麼日誌看起來像當我陷阱異常。偏移量不是'代碼行',象徵性允許這樣做。但是,通常情況下,我從跟蹤中獲得足夠的信息以將其縮小至真正的近距離。 :

- [MPGameSequencer sequenceInitState]:*例外[* - [__ NSArrayM insertObject:atIndex:]:對象不能是零]發生在編寫遊戲的規範,持續。 (

0 CoreFoundation      0x028de02e __exceptionPreprocess + 206 
1 libobjc.A.dylib      0x022bbe7e objc_exception_throw + 44 
2 CoreFoundation      0x02891b6a -[__NSArrayM insertObject:atIndex:] + 314 
3 CoreFoundation      0x02891a20 -[__NSArrayM addObject:] + 64 
4 Battles        0x00221c49 -[MPGameSequencer sequenceInitState] + 809 
5 Battles        0x0021e359 -[MPGameSequencer nextFrame:] + 121 
6 Battles        0x00067324 -[CCTimer update:] + 308 
7 Battles        0x00070444 -[CCScheduler update:] + 772 
8 Battles        0x0009dc81 -[CCDirectorIOS drawScene] + 225 
9 Battles        0x0009ef44 -[CCDirectorDisplayLink mainLoop:] + 52 
10 QuartzCore       0x007c32d2 _ZN2CA7Display11DisplayLink8dispatchEyy + 110 
11 QuartzCore       0x007c375f _ZN2CA7Display16TimerDisplayLink8callbackEP16__CFRunLoopTimerPv + 161 
12 CoreFoundation      0x0289d376 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22 
13 CoreFoundation      0x0289ce06 __CFRunLoopDoTimer + 534 
14 CoreFoundation      0x02884a82 __CFRunLoopRun + 1810 
15 CoreFoundation      0x02883f44 CFRunLoopRunSpecific + 276 
16 CoreFoundation      0x02883e1b CFRunLoopRunInMode + 123 
17 GraphicsServices     0x035e57e3 GSEventRunModal + 88 
18 GraphicsServices     0x035e5668 GSEventRun + 104 
19 UIKit        0x00e9165c UIApplicationMain + 1211 
20 Battles        0x000c2bce main + 270 
21 Battles        0x00002a15 start + 53 

+0

謝謝伊夫,我非常感謝你的支持。我需要正確學習並嘗試。我包括一個異常捕獲器似乎只有一些動畫有問題,並創建了一些異常處理程序,但我不能「倒退」工程師與精靈框架給我的麻煩,因爲它們是由id索引而不是幀名稱和控制檯不給我的身份證。我在這裏重新提出了這個問題:http://stackoverflow.com/questions/14979451/cocos2d-and-spritebatchnode-cannot-identify-which-sprite-frame-is-causing-an-as – mm24