2012-02-14 82 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和断点被击中,它有助于打击调试器的继续按钮,让应用程序崩溃。然后,你应该能够看到所需要的堆栈跟踪。

相关问题