7

我想知道如何在 xcode 中进行最佳调试。我知道如何设置断点,但理想情况下我希望模拟器停止然后单步执行代码......

不是单步执行断点,而是逐行执行代码,这样我就可以看到它的去向、运行的方法等......

这可能吗,如果可以,怎么办?

4

2 回答 2

23

Xcode 中的调试控件图标

在 Xcode 4 中代码窗口的左下方,您可以看到调试步骤控件。每个都有一个简短的替代文本来解释它。我将在这里稍微详细地解释一下。学习成为专家调试器是许多教科书的主题。

播放按钮替代文本:继续程序执行。你可能已经发现了这个。按下它会前进到下一个断点。

跳跃箭头替代文字:跨过。重复按此按钮将允许您在当前范围级别上推进您的程序,就像您的程序一样。它将允许您通过当前方法逐步观察程序的行为。当前方法完成后,Step over 会将您带到程序堆栈中上一级的调用方法。

向下箭头替代文本:进入. 按下此按钮将跟随新方法进入其范围,并允许您查看被调用方法中的代码(如果已编译用于调试)。例如,在上述调试窗口中的当前代码行上单击此按钮将带您进入 _generateSources 方法,然后您可以使用 Step over 继续执行该方法。

向上箭头替代文本:Step out。将您带出当前上下文并进入程序堆栈中的调用方法。这与使用 Step over 完成方法的行为相同,正常执行程序并在原始范围内执行您未使用 Step over 调试的所有代码行。

调用堆栈视图

单击带有蓝色背景的剪影以查看当前调用堆栈。调用堆栈将始终从您当前的范围一直前进到为启动程序而调用的第一个方法。您在此处看到的每个方法都按顺序调用以到达 -[HelloWorldLayer init]。当您按下Step out 时,当前执行代码行将返回到 -[CCNode node],如果您有它的源代码,您可以浏览它。

左侧是当前正在执行的代码行范围内可见的当前局部变量(此图中的第 76 行)。这些变量是您真正使用上述命令的方式,例如Step overbackgroundwinSize是在此范围内定义且当前正在使用的局部变量。当范围退出时,它们将消失。 _cmd是指向当前在 Objective-C 中调用的选择器的指针:-[HelloWorldLayer init]。在您成为高级调试器之前,您将不需要它。 self是指向一个对象的指针,该对象包含属于当前执行的类、HelloWorldLayer 和objc_super 的所有 ivars是指向 HelloWorldLayer 父类的指针。

于 2012-10-02T20:18:25.283 回答
8

我会在@Thomson Corner 的答案中添加键盘快捷键。

  • 使用“c”继续。's' 代表下一步,'n' 代表下一步,'f' 代表完成。我不喜欢用鼠标操作调试器。这些图标太小了,将指针放在它们上面很痛苦(偶尔)。我一直是键盘侠,对键盘真的很舒服。

  • 您还应该尝试使用po - 它会打印出带有提前输入建议的变量值。像po _varName。可以轻松检查变量是否为零值等,

  • 您还可以通过修改~/.lldbinit.

这是官方教程: http: //lldb.llvm.org/tutorial.html。还有另一个教程:http ://www.informit.com/articles/article.aspx?p=1829415&seqNum=6 。我上面指出的是程序员最常执行的最基本的调试功能。还有更多选项,例如异常断点和加载程序,但如果您刚刚开始,我很确定它们是另一天。

于 2012-10-02T20:28:50.060 回答