奇怪的崩溃:NSRangeException带有“无用的”堆栈跟踪

时间:2013-08-20 13:56:13

标签: ios objective-c

所以,这是其中一个似乎与其他人一起发生的崩溃之一,而且我只是感谢Bugsnag。

NSRangeException: -[__NSCFString characterAtIndex:]: Range or index out of bounds

到目前为止一切都那么好,只是你的普通的fencepost错误或某些,对吧?除了栈跟踪看起来像:

[appname]:0x0006a399 • [appname]
[appname]:0x00089435 • [appname]
[appname]:0x002629cb • _ZNSt3__16vectorIiNS_9allocatorIiEEE21__push_back_slow_pathIiEEvOT_
[appname]:0x001802b5 • _ZNSt3__16vectorIN7gmscore4base10reffed_ptrINS1_6vector16GLBaseLabelBatchEEENS_9allocatorIS6_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS6_RS8_EE
[appname]:0x0019d115 • _ZNSt3__16vectorIN7gmscore6vector4text15GlyphQuadVertexENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_
[appname]:0x0004eb33 • [appname]
[appname]:0x0004eae8 • [appname]

所以我完全不知道它来自哪里,但它似乎不是由我的代码中的characterAtIndex:调用直接生成的(此外,在整个应用程序中只有一个这样的调用并且它得到了很好的保护)。它似乎是一个非常核心的C函数,试图从索引超出范围的字符串中读取,但是从这个堆栈跟踪中我甚至无法弄清楚它在哪里。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

可能是您正在调用一个系统方法,而该系统方法又调用objectAtIndex:。我倾向于在调试时在项目中始终有一个异常断点,因此它会显示导致异常的调用代码。

创建一个:

  1. 打开断点窗格。

  2. 在窗格底部创建一个新断点

  3. enter image description here

    1. 选择"添加异常断点..."

    2. 在下一个屏幕上,保留默认选项并点击"完成"

    3. enter image description here

      再次导致崩溃并查看它在哪里打破了应用程序。

      希望这有帮助!

答案 1 :(得分:2)

您可以发布完整的崩溃报告吗?可能还有其他线索。

鉴于异常+​​堆栈跟踪,我怀疑存在堆栈损坏或者异常处理程序的配置存在一些愚蠢的行为导致堆栈被误报(我之前已经看到过这两者)。

如果您收集了崩溃报告,请检查它们之间的共性;

  • 所有相同型号的设备?

  • ... OS的同一版本?

  • 破解的?

...等......

一般来说,像这样的错误令人抓狂。