2

所以,这是似乎只发生在其他人身上的那些崩溃之一,而且我只是感谢 Bugsnag 才发现的。

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

到目前为止一切顺利,只是您的普通围栏错误或类似错误,对吗?除了堆栈跟踪看起来像:

[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 函数,它试图从索引超出范围的字符串中读取,但是从这个堆栈跟踪中我什至无法开始弄清楚它在哪里。有任何想法吗?

4

2 回答 2

4

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

创建一个:

  1. 打开断点窗格。

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

在此处输入图像描述

  1. 选择“添加异常断点...”

  2. 在下一个屏幕上保留默认选项,然后单击“完成”

在此处输入图像描述

再次导致崩溃,看看它在哪里破坏了你的应用程序。

希望这可以帮助!

于 2013-08-20T14:44:14.213 回答
2

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

鉴于异常 + 堆栈跟踪,我怀疑堆栈损坏在起作用,或者异常处理程序的配置有问题导致堆栈被误报(我以前见过这两种情况)。

如果您有一系列崩溃报告,请检查它们之间的共性;

  • 都在同一型号的设备上?

  • ...同一版本的操作系统?

  • 越狱?

... ETC ...

通常,像这样的错误令人抓狂。

于 2013-08-20T15:46:39.097 回答