在 XCode 中调试 - 通过代码和断点运行 [关闭]

Posted

技术标签:

【中文标题】在 XCode 中调试 - 通过代码和断点运行 [关闭]【英文标题】:Debugging in XCode - running through code and breakpoints [closed] 【发布时间】:2012-10-02 20:06:34 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

这就是我喜欢 xcode 的原因【参考方案2】:

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

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

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

您还可以通过修改~/.lldbinit来更改命令别名。

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

【讨论】:

developer.apple.com/library/ios/documentation/IDEs/Conceptual/… 为当前 XCode 支持的快捷方式提供了相当全面的指南。

以上是关于在 XCode 中调试 - 通过代码和断点运行 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

xcode调试

Xcode之断点调试详解

Xcode 11 断点仅在 HEX 代码上停止

SwiftUI项目如何在Xcode预览(Preview)中开启调试支持

SwiftUI项目如何在Xcode预览(Preview)中开启调试支持

通过代码设置 Xcode 断点? (如 pause() 函数)