我正在使用X-code 3.1 iphone SDK 3.0 beta 5在iphone(OS 2.0)上调试我的应用程序。我的应用程序崩溃给出消息 *由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [NSCFArray insertObject:atIndex:]:index(8)超出bounds(8)' 2009-05-23 17:13:32.304 myApp [405:5a07] Stack :( 808163835, 806099672, 807978623, 807978527, 812332907, 812067179, 812067103, 126035, 812081649, 812081343, 826526801 )
在gdb中我发出命令 (gdb)信息行126035 第126035行超出了“/ Users / videomac / manish / EXPLab / 2009-05-18-12-27 myApp / main.m”的范围。
(gdb)info line * 126035 “/ Users / videomac /manish / EXPLab / 2009-05-18-12-27 myApp / Classes / PlaybackThread / Playback.m”的第527行从地址0x1ec52开始< - [Playback startPlaybackThread:] + 514>并以0x1ec6a< - [Playback startPlaybackThread:] + 538>结束。
这是否意味着崩溃是由于我的方法中的代码[Playback startPlaybackThread:] 那么no +514和+538的意义是什么呢?它们是否代表行号?
有没有其他方法可以找到崩溃的原因?
答案 0 :(得分:3)
查找异常发生位置的最简单方法是在gdb中设置断点 - [NSException raise]和objc_exception_throw。然后你会在它发生时立即中断,你可以在那时检查堆栈。
答案 1 :(得分:1)
关于您提到的第一个错误,来自-insertObject:atIndex:文档:
重要:提升NSRangeException 如果 index 大于数量 数组中的元素。
我会寻找这种方法的调用,试图找出导致错误的方法。
Numbers +514和+538给出了之前指令代码的偏移量。