您可能正在使用那些令人討厭的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
)
啓用全局異常斷點在Xcode中獲得更多的細節。你發佈的內容不是堆棧跟蹤,並且這些消息與崩潰無關。 lldb ist只是調試器提示符(你可以在這裏輸入調試器命令) – LearnCocos2D
我試圖按照https://devforums.apple.com/thread/68421中的說明啓用它們,但它導致同樣的崩潰,沒有人類可讀的日誌。我發現一篇文章談論Symbolicating(http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports)該應用程序,但我還沒有提交該應用程序呢..看來我需要一個存檔文件來分析它。 – mm24