8

我有一个NSRangeException不会一直发生的错误(尤其是在调试时)。它随机出现,我无法弄清楚它来自哪里。我有很多数组操作,所以很难以这种方式消除它。

我的问题是我是否可以从调试器输出中获得线索,例如类和行号,例如数字 12109 和 707 是什么?:

2012-03-15 09:25:15.303 appname[12109:707] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 0]'

任何指针表示赞赏。

编辑:日志的剩余部分:

*** First throw call stack:
(0x33ff38bf 0x342431e5 0x33f4b275 0x1702d 0x37662331 0x3761b2b3 0x33f4d435 0x373b79eb 0x373b79a7 0x373b7985 0x373b76f5 0x3744de55 0x374e3e45 0x373aa99b 0x33fc7b4b 0x33fc5d87 0x33fc60e1 0x33f494dd 0x33f493a5 0x307cdfcd 0x373ca743 0x2325 0x22e4)
terminate called throwing an exception
4

2 回答 2

53

添加异常断点。这将在引发异常的行上停止。

在断点导航器中,单击左下角的加号,选择异常断点和所有异常。你真的应该在所有项目上都有这个,它是无价的。不过,我们在这里的问题要少得多!

于 2012-03-15T11:14:23.860 回答
1

再往下看你的崩溃日志,很可能在某些时候它会指向一个实际的方法和行。

例如,在设备崩溃日志的以下块中,最后一行清楚地指向第 264 行 FacebookController.m 类中的 request:didLoad: 方法。

0x33defacb -[NSObject doesNotRecognizeSelector:] + 175
0x33dee945 ___forwarding___ + 301
0x33d49680 _CF_forwarding_prep_0 + 48
0x00037e47 -[FacebookController request:didLoad:] (FacebookController.m:264)
于 2012-03-15T08:54:45.913 回答