2012-02-14 61 views
2

我得到那裏我目前運行的我的智慧一個非常混亂的崩潰......Heisenbug - > NSInvalidArgumentException:能力是荒謬

首先崩潰日誌:

日期/時間:2012-02- 14 10:55:09.771 0100
OS版本:Mac OS X的10.7.3(11D50b)
報告版本:9

崩潰螺紋:0

異常類型:EXC_CRASH( SIGABRT)
異常代碼:0x0000000000000000,0x0000000000000000

特定應用信息:
iPhone模擬器272,iPhone OS 5.0(iPhone/9A334)

中止()稱爲
*終止應用程序由於未捕獲的異常'NSInvalidArgumentException' 的,原因是: '* - [__ NSPlaceholderDictionary initWithCapacity:]:容量(2147483648)是荒謬' *第一擲調用堆棧: (0x25ca052 0x21d8d0a 0x24f21b 7 0x252597b 0x688e2 0x6a3b5 0x41b2f 0x1f29d 0x1f87e 0xba335c 0xbabd0d 0xcc8a1c 0xcc93a9 0xf3de39 0xf3d143 0xf3e3cf 0xf40a31 0xf4098c 0xf393e7 0xca1812 0xca1ba2 0xc88384 0xc7baa9 0x2333fa9 0x259e1c5 0x2503022 0x250190a 0x2500db4 0x2500ccb 0x2332879 0x233293e 0xc79a9b 0x23ad 0x2325)

線程0毀損:
0 libsystem_kernel.dylib 0x983379c6 __pthread_kill + 10
1 libsystem_c.dylib 0x939e7f78 pthread_kill + 106
2 libsystem_c.dylib 0x939d8bdd中止+ 167
3的libC++ abi.dylib 0x01fa5e78 abort_message + 50
4的libC++ abi.dylib 0x01fa389e _ZL17default_terminatev + 34
5 libobjc.A.dylib 0x021d8f4b _objc_terminate + 94
6的libC++ abi.dylib 0x01fa38de _ZL19safe_handler_callerPFvvE + 13
7的libC++ abi.dylib 0x01fa3946的std ::終止()+ 23
8的libC++ ABI名爲.dylib 0x01fa4b3e __cxa_rethrow + 83
9 libobjc.A.dylib 0x021d8e49 objc_exception_rethrow + 47
10的CoreFoundation 0x02500e10 CFRunLoopRunSpecific + 304
11的CoreFoundation 0x02500ccb CFRunLoopRunInMode + 123
12個GraphicsServices 0x02332879 GSEventRunModal + 207
個13 GraphicsServices 0x0233293e GSEventRun + 114
14的UIKit 0x00c79a9b UIApplicationMain + 1175
15 LVM 0x000023ad主+ 125(的main.m:14)
16 LVM 0x00002325開始+ 53

我下獅子10.7.3工作與Xcode 4.2。 分析儀不顯示錯誤,項目在昨天之前一直運行穩定。 錯誤本身不是在安裝過程中引起的,而是由重新加載必要數據顯示的手勢引起的。

初看起來似乎很清楚:我已經分配了一個無效容量的NSDictionary實例(2147483648實際上是一個帶符號的-2147483648,因此它可能是一個溢出工件)。

  • 我的系統擁有所有必要的設置時發生崩潰停止:NSZombieEnabled, obj_exc_throw等好了,它會停止,但在main.m.主循環所以沒有信息看到。
  • 因此,我查找了我的所有NSXXDictionary實例,並確保它們都具有常量 容量初始值設定項或使用[...字典]分配。第一個驚喜:它仍然是 崩潰。
  • 好的,這可能是Xcode有時不會正確地重新編譯更改? Xcode關閉, 清理,重建,拋出構建目錄(構建,緩存,dstroot),重新啓動,任何事情。 還是一樣的崩潰。
  • 如您所見,它在運行循環中崩潰,所以我沒有得到有關 位置的更多信息。好吧,啓動配置文件 - >系統跟蹤,看看我能找到....系統跟蹤崩潰! 8-0
  • Erm ....我的同事對於當前的變化沒有任何問題,所以我試圖用SVN 找到出現問題的地方。在這裏,我再次卡住:錯誤消失,並出現 ,所以我不能確定原因。

那麼......有沒有其他數據結構(NSArray等)或函數可能會導致這種奇怪的行爲?或者你有沒有什麼好的調試技巧可以把它搞定? 感謝您提供任何有用的幫助。

編輯:發現的錯誤,這是我自己:(見下

回答

2

,再而自己的愚蠢規則.... 如果碰到同樣的錯誤,請搜索所有可能的構造函數。其實我已被忽略一個[NSXXDictionary dictionaryWithCapacity]構造函數,其中容量實際上是一個非法值,它被稱爲de eply嵌套在運行時循環中。

我只搜索了initWithCapacity,因爲我通常只使用沒有容量的字典構造函數,而我的無意識假設自然是錯誤的。

1

答案當我有一個斷點設置在obj_exc_throw和斷點被擊中,它有助於打擊調試器的繼續按鈕,讓應用程序崩潰。然後,你應該能夠看到所需要的堆棧跟蹤。