在Objective c代码中查找异常

时间:2009-05-23 12:13:05

标签: objective-c iphone xcode

我正在使用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的意义是什么呢?它们是否代表行号?

有没有其他方法可以找到崩溃的原因?

2 个答案:

答案 0 :(得分:3)

查找异常发生位置的最简单方法是在gdb中设置断点 - [NSException raise]和objc_exception_throw。然后你会在它发生时立即中断,你可以在那时检查堆栈。

答案 1 :(得分:1)

关于您提到的第一个错误,来自-insertObject:atIndex:文档:

  

重要:提升NSRangeException   如果 index 大于数量   数组中的元素。

我会寻找这种方法的调用,试图找出导致错误的方法。

Numbers +514和+538给出了之前指令代码的偏移量。