调试Cocoa应用程序中的异常

时间:2008-11-22 08:34:29

标签: cocoa debugging

我正在使用NSTextView开发应用。当我将随机字节粘贴到其中时(例如,从编译的C程序中),它会显示乱码,就像它应该的那样。但是,当I -setShowsControlCharacters:YES时,同样会导致崩溃并多次出现以下错误:

2008-11-22 00:27:22.671 MyAppName[6119:10b] *** -[NSBigMutableString _getBlockStart:end:contentsEnd:forRange:stopAtLineSeparators:]: Range or index out of bounds

我创建了一个新项目,只有一个具有相同属性的NSTextView,它没有这个问题。

我的问题是,如何调试我的应用以查找错误原因?我不知道bug的来源。我不熟悉Xcode内置的调试器。如果有人能指出我如何追踪这样的错误,我将非常感激。感谢。

2 个答案:

答案 0 :(得分:10)

调试Cocoa应用程序objc_exception_throw-[NSException raise]时要设置的另一组有用断点。在10.5中,所有异常都会通过objc_exception_throw,但如果您要定位Tiger,则应在两者上设置断点。

http://www.cocoadev.com/index.pl?DebuggingTechniques有更多调试技巧。

答案 1 :(得分:4)

我不知道你知道多少,所以我会尝试一种非常基本的方法,请不要被冒犯。

我假设NSTextView位于外部nib / xib中,并且不是以编程方式创建的。
如果是这样,请在“界面”构建器中打开nib / xib,然后单击有问题的NSTextView元素。

然后点击 Cmd-5 工具 - > Connections Inspector

从这里,您可以看到实际源代码中要查找的 Outlets / Actions

最有可能的问题是操纵“参考插座”对象,或“已发送操作”功能。

一旦您知道需要注意哪些方法/变量,就可以在Xcode中打开这些部分的源代码。然后,您可以通过单击编辑器窗口左侧的行号在任何行设置断点。

点击运行 - >调试器。应弹出一个新窗口,单击该窗口工具栏中的“运行并转到”。您的应用应该正常运行,直到它达到您在源代码中设置的断点。当突破点被击中时,你可以将代码中的变量鼠标悬停在调试器窗口的下半部分。应弹出变量的当前值,以便于检查。

通常,您可以使用调试器的右上方面板来检查变量表,从而获得相同的信息。

完成该断点后,单击调试器窗口顶部的“继续”,程序将执行到完成或下一个断点。

这应该让您开始在Xcode下进行调试。 他们是断点的不同种类/用途以及你可以在Xcode中做的各种额外的花哨的东西。 有关更多信息,请查看这个真棒CocoaHeads video

祝你好运,

Brian G.