Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

调试器面板

在屏幕下方的调试器面板中, 可以找到包括调试器在内的许多Godot的调试工具. 点击 调试器 即可打开.

../../../_images/overview_debugger.webp

调试器面板被分成几个标签, 每个标签专注于一个特定的任务.

栈跟踪

当 GDScript 编译器运行到你的代码中设置的断点(breakpoint)时,‘堆栈跟踪(Stack Trace)’标签页会自动打开。

它会为你提供 堆栈跟踪(Stack Trace) stack trace、对象当前状态的相关信息,以及控制程序执行的各种按钮。当调试器在断点处暂停时,脚本编辑器左侧的行号栏(gutter)里会显示一个绿色的三角箭头。这个箭头就指示了调试器当前暂停在哪一行代码上。

小技巧

你可以通过点击脚本编辑器左侧的装订线(位于行号左边)来创建断点。当鼠标悬停在该装订线上时,你会看到一个透明的红点出现;点击放置断点后,它会变成不透明的红点。再次点击该红点即可移除断点。通过这种方式创建的断点会在编辑器重新启动后保留,即使退出编辑器时脚本尚未保存也是如此。

你还可以在 GDScript 中使用 breakpoint 关键字来创建直接存储在脚本中的断点。与通过点击装订线创建的断点不同,这种基于关键字的断点在使用版本控制时可以在不同机器之间保持一致。

你可以使用右上角的按钮来:

  • 跳过所有断点. 这样一来, 你就可以为将来的调试会话保存断点.

  • 复制当前错误消息.

  • 步入 代码. 这个按钮将带你进入下一行代码, 如果是函数, 它将逐行进入函数.

  • 步过 的代码. 这个按钮会进入下一行代码, 但它不会逐行跳过函数.

  • Break . 这个按钮会暂停执行游戏.

  • 继续 . 该按钮在断点或暂停后恢复游戏.

备注

目前还不支持在 tool scripts 上使用调试器和断点。无论是在脚本编辑器里手动点击设置断点,还是使用 breakpoint 关键字,都会被直接忽略。作为替代,你可以使用 print 打印语句来输出并查看变量的内容。

错误

这是运行游戏时打印错误和警告信息的地方.

你可以在 项目设置>调试> GDScript 中禁用特定的警告.

求值器

这个标签页包含了一个表达式求值器(expression evaluator),也被称为 REPL。它是‘堆栈跟踪(Stack Trace)’标签页中‘堆栈变量(Stack Variables)’树的一个更强大的补充。

当项目被调试器中断时(比如触发了断点或发生了脚本错误),你可以在顶部的文本框里输入一个表达式来进行求值。如果项目正在正常运行,这个表达式输入框是无法编辑的,所以你需要先设置一个断点让程序停下来。如果你取消勾选 Clear on Run(运行时清除) ,这些表达式可以在多次运行之间保留下来,不过一旦完全退出编辑器,它们还是会丢失的。

表达式是使用 Godot's expression language 来进行求值的,它允许你进行算术运算,以及在表达式内部调用一些函数。表达式可以引用成员变量,也可以引用与断点所在行处于同一作用域内的局部变量。你还可以输入常量值,这让它可以被当作一个内置的计算器来使用。

请看下面的脚本:

var counter = 0

func _process(delta):
    counter += 1
    if counter == 5:
        var text = "Some text"
        breakpoint
    elif counter >= 6:
        var other_text = "Some other text"
        breakpoint

如果调试器在包含 breakpoint第一 行代码处中断(暂停),那么以下的表达式将会返回非空(non-null)的值:

  • 常量表达式: 2 * PI + 5

  • 成员变量: counter, counter ** 2, sqrt(counter)

  • 局部变量或函数参数: delta, text, text.to_upper()

如果调试器在包含 breakpoint第二 行代码处暂停(中断),那么下面这些表达式将会返回非空(non-null)的值:

  • 常量表达式: 2 * PI + 5

  • 成员变量: counter, counter ** 2, sqrt(counter)

  • 局部变量或函数参数: delta, other_text, other_text.to_upper()

分析器

分析器用于查看项目使用时正在运行的代码,以及这对性能的影响。

参见

关于如何使用分析器的详细说明可以在专用的 性能分析器 页面中找到。

可视分析器

可视分析器可以用来监视渲染一帧在 CPU 和 GPU 上分别在哪些项目上消耗的时间最多。这样就能够跟踪渲染时可能造成 CPU 和 GPU 方面瓶颈的原因。

警告

可视分析器只会测量 CPU 在渲染任务上所消耗的时间,例如绘制调用的执行。可视分析器中并不包含其他任务所消耗的 CPU 时间,例如脚本和物理。跟踪非渲染方面的 CPU 任务请使用“分析器”选项卡。

要使用可视分析器,请在运行项目后切换到“调试器”底部面板中的可视分析器选项卡,然后点击开始

可视分析器选项卡,点击“开始”、等待几秒、然后点击“停止”

可视分析器选项卡,点击开始、等待几秒、然后点击停止

小技巧

你也可以勾选 自动启动(Autostart),这样下次运行项目时,可视化性能分析器就会自动启动。需要注意的是, Autostart 复选框的勾选状态不会在编辑器会话之间保留(也就是说,如果你彻底关闭再重新打开编辑器,这个勾选状态会重置)。

随着性能分析器的运行,你会看到各种类别和对应的数据结果陆续出现。同时,图表线条也会显示出来,其中左侧是 CPU 帧图表,右侧是 GPU 帧图表。

单击停止完成分析,此时结果仍然可见,但会冻结在原位。停止正在运行的项目后结果仍然可见,但退出编辑器后则不可见。

点击左侧的结果类别,就可以在右侧的 CPU 和 GPU 图表中高亮显示它们对应的线条。反过来,你也可以直接点击图表,将光标移动到某一特定的帧数,此时左侧的结果类别中,该帧对应的数据类型也会被高亮显示。

你可以将结果的显示方式在“时间值(每帧多少毫秒)”和“目标帧时间的百分比”之间进行切换。 debugger/profiler_target_fps 这一编辑器设置项会根据指定的帧率(FPS)来控制目标帧时间的数值。

如果在分析过程中出现帧率峰值,就可能会导致图表尺度的问题。禁用适应帧可以让图表放大至 60 FPS+ 的部分。

备注

请记住,可视分析器的结果可能会因视口分辨率的不同而有很大差异,如果 拉伸模式 使用 disabledcanvas_items,则视口分辨率由窗口大小决定。

对比两次运行之间的结果时,请确保每次运行所使用的视口大小相同。

使用任何渲染方法(Forward+、Mobile、Compatibility)时都支持可视分析器,但报告的类别将根据当前渲染方法以及启用的图形功能而有所不同。例如使用 Forward+ 时,具有阴影投射灯光的简单 2D 场景将显示以下类别:

2D 场景在可视分析器中的示例结果

2D 场景在可视分析器中的示例结果

再举一个 Forward+ 的例子,启用了阴影投射灯光和各种效果的 3D 场景将导致启用以下类别:

3D 场景在可视分析器中的示例结果

3D 场景在可视分析器中的示例结果

请注意,在 3D 示例中,有几个类别的名称后面都带有 (Parallel) (并行)的标识。这暗示着 GPU 正在同时(并行)处理多个任务。这通常意味着,如果你只禁用其中一项功能,性能提升的幅度可能不会像你预期的那么大,因为其他相关的任务依然需要按顺序(串行)来执行。

备注

由于平台限制,在 macOS 系统上使用兼容渲染器(Compatibility renderer)时,不支持可视化性能分析器。

网络分析器

网络剖析器包含了所有通过多人游戏API进行通信的节点列表, 对于每个节点, 还包含了一些传入和传出网络交互量的计数器. 它还具有一个带宽表, 可以显示任何特定时刻的总带宽使用情况.

备注

带宽计量器不会考虑 高级多人游戏 API 自己的压缩系统。这意味着改变所使用的压缩算法不会改变带宽计量报告的数值。

监视

这些监视器会在游戏运行时,以图表的形式展示游戏的各项指标,比如帧率(FPS)、内存使用情况、场景里有多少个节点等等。所有的监视器都会自动持续记录这些数据,所以即使游戏运行时你并没有打开某个监视器,之后随时打开它,依然能看到之前数值的变化情况。

参见

除了默认的性能监视器之外,你还可以创建 custom performance monitors ,用来追踪你项目中任意想要监控的数值。

显存

显存标签显示了游戏运行时的显存使用情况。它按资源路径提供了每一个使用显存的资源列表、资源的类型、资源的格式,以及该资源使用了多少显存。在面板的右上方还有一个显存占用总量的数字。

../../../_images/video_ram.png

其他

其他选项卡中的工具可以用来识别你在运行时点击了哪个控件节点:

  • 点击的控件显示的是被点击节点在场景树中的位置。

  • 点击的控件类型显示的是被点击节点的类型。