我想知道如何在xcode中进行最佳调试。我知道如何设置断点但理想情况下我希望模拟器停止然后单步执行代码...
不是单步执行断点,而是逐行遍历代码,这样我就可以看到它的位置,运行的方法等...
这是可能的,如果是这样的话?
答案 0 :(得分:23)
在Xcode 4的代码窗口的左下角,您可以看到调试步骤控件。每个都有一个简短的替代文字来解释它。我将在这里稍微详细解释一下。学习成为专业调试器是许多教科书的主题。
播放按钮alt text:继续执行程序。你可能已经发现了这个。按此按钮前进到下一个断点。
跳跃箭头替换文字:跳过。反复按此按钮将允许您按照程序的当前级别推进您的程序。它允许您逐步通过当前方法观察程序的行为。当前方法完成后,Step over将带您进入程序堆栈中的调用方法。
向下箭头替换文字:单步进入。按下此按钮将跟随新方法进入其范围,并允许您查看被调用方法中的代码(如果已编译以进行调试)。例如,在上面的调试窗口中的当前代码行上单击此按钮将转到_generateSources方法,然后您可以通过Step over进行该方法。
向上箭头替换文字:退出。从程序堆栈中逐步升级当前上下文和调用方法。这与使用Step over完成一个方法,正常执行程序并执行原始范围中未使用Step over调试的所有代码行相同。
单击蓝色背景的轮廓以查看当前的调用堆栈。调用堆栈将始终从当前作用域一直前进到调用以启动程序的第一个方法。您在此处看到的每个方法都是按顺序调用的,以便达到 - [HelloWorldLayer init]。当您按退出时,当前执行代码行将返回 - [CCNode节点],如果您有源代码,则可以浏览它。
左侧是当前正在执行的代码行范围内可见的局部变量(此图像中的第76行)。这些变量是你如何真正使用上述命令,如 Step over 。 background 和 winSize 是在此范围内定义并且当前正在使用的局部变量。当范围退出时,它们将消失。 _cmd 是指向当前在Objective-C中调用的选择器的指针: - [HelloWorldLayer init]。在您是高级调试器之前,您不需要这样做。 self 是指向包含属于当前正在执行的类的所有ivars的对象的指针,HelloWorldLayer和 objc_super 是指向HelloWorldLayer父类的指针。
答案 1 :(得分: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。我上面指出的是程序员最常执行的最基本的调试功能。还有更多选项,例如异常断点和加载程序,但我很确定如果你刚开始的话,它们会再次出现。