蓝图调试

使用断点暂停执行,以检查图表和变量值。

Choose your operating system:

Windows

macOS

Linux

蓝图调试是一项非常强大的功能,它允许您在"在编辑器中运行(Play In Editor)""或"在编辑器中模拟(Simulate In Editor)"模式中暂停游戏执行,并通过使用断点单步调试蓝图或关卡蓝图的任何图表。

调试功能按钮

蓝图调试器在PIE和SIE会话期间提供对游戏执行的控制。当游戏运行时,这些功能按钮在 工具栏 中处于启用状态。根据正在调试的蓝图的类型和调试会话的当前状态,会出现不同的调试功能按钮。有些功能按钮只有在相关的时候才启用,例如,当 断点(Breakpoint) 被命中时。

debugging_editor.png

当PIE模式或SIE模式处于活动状态时, 调试(Debug) 选项卡(可从 蓝图编辑器(Blueprint Editor) 的窗口菜单中打开)以及 蓝图调试器(Blueprint Debugger) 将显示上下文相关的调试按钮。

blueprint_debugger.png

断点

断点 是指可以放置在蓝图图表节点上的标记。PIE或SIE模式期间即将执行带断点的节点时,游戏将暂停,开发人员将被带往蓝图编辑器的图表视图中的该节点。这提供了观察变量值并检查或单步调试蓝图内的执行流程的机会。给定蓝图的所有断点都显示在 调试选项卡(Debug tab) 中,可以在蓝图的图表中查看已选中的断点。要在节点上放置一个断点,右键单击节点并从上下文菜单中选择 添加断点(Add Breakpoint) ,此时节点的左上角将出现一个实心的红色八边形。通过再次右键单击节点,或者右键单击调试(Debug)选项卡中断点的条目,选择 移除断点(Remove Breakpoint) 命令,可以移除断点。

ActiveBreakpoint.png

该断点将在蓝图节点即将执行时中断游戏。

要在未完全移除断点的情况下暂时禁用断点,可以右键单击蓝图节点本身或者调试(Debug)选项卡中断点的条目,然后从上下文菜单中选择 禁用断点(Disable Breakpoint) 。禁用的断点将显示为红色八边形轮廓。禁用的断点将不会执行,但可以轻松地再次启用。与反复销毁并重新生成断点相比,该过程更加便捷,更不易发生人为错误。

InactiveBreakpoint.png

该断点已被禁用,目前不执行任何操作,但可以在需要时轻松地再次启用。

若要启用已禁用的断点,请在节点上 右键单击(Right-clicking) 并选择 启用断点(Enable Breakpoint) 或单击 调试(Debug) 中断点旁边的图标来启用断点。这也可以通过 右键单击(Right-clicking) 调试(Debug) 选项卡中的断点并选择 启用断点(Enable Breakpoint) 来完成。可以在任何时候创建、禁用、启用或销毁断点,包括在调试会话期间。断点保存在项目.ini文件中,因此断点将在编辑器会话之间持久存在。

如果断点所处的位置无效,可能会显示为黄色,并带有感叹号。在某些情况下,编译蓝图可以解决该问题。如果不是这种情况,将鼠标光标置于断点图标上将显示解释说明。

WarningBreakpoint.png

该断点无效,永远不会被命中。在某些情况下,重新编译蓝图可以解决该问题。

当使用断点暂停执行时,编辑器将高亮显示并聚焦该节点,并且将在其上放置一个红色大箭头。

BreakingOnBreakpoint.png

该断点刚刚被命中,暂停了执行。

调试选项卡和蓝图调试器

调试(Debug) 选项卡以断点和监视值的形式显示了由设计师指定为重要的信息,以及已执行且属于蓝图的所有节点的跟踪堆栈。此窗口还显示了在使用断点时用于控制游戏执行的功能按钮。

查看窗口

蓝图查看窗口(Blueprint Watch Window) 设计用于通过允许您访问想要查看的变量和节点来加速调试。从您在编辑器中打开的每个蓝图查看数据,这些数据是当前调用堆栈的一部分,它们将被合并到单个列表中,每当蓝图执行暂停时,该列表将使用当前数据填充。您可以使用该列表检查变量和函数输出,同时可以在蓝图之间轻松跳转。可以展开数组、集、映射和其他数据结构,从而快速、方便地对其中包含的任何数据进行向下钻取检查。您还可以单击"节点名称(Node Name)"列中的条目转到任何蓝图中的指定节点,还可以选择"对象名称(Object Name)"列中的条目选择特定的对象实例。

调用堆栈

调试会话期间可用的 调用堆栈 在概念上类似于大多数C++开发环境中的调用堆栈。调用堆栈显示了蓝图与本地(C++)代码之间的执行流程,且蓝图函数当前在堆栈的顶部执行。

蓝图宏不会出现在调用堆栈中。相反,蓝图宏将作为调用它的蓝图函数的一部分出现。

ActiveBreakpoint.png

上面的蓝图函数递归执行阶乘计算。已在函数的末尾设置了断点。

当断点被命中时,调用堆栈将列出当前正在运行的函数,从顶部的当前函数开始,然后向下到调用函数。这意味着,每个行条目都包含一个函数的名称,该函数是由紧接其下一行上的函数调用的。在递归(自调用)函数的情况下,同一函数名可能在一行中出现多次。

CallStack_FiveFactorial.png

该调用堆栈显示了对上面显示的阶乘函数的一个五层递归调用,该函数最初是从Actor的主蓝图图表中调用的,而它反过来又响应从本地(C++)代码中调用的"BeginPlay"事件。

CallStack.png

要查看(或隐藏)调用堆栈,在 开发者工具(Developer Tools) 子菜单下的 窗口(Window) 下拉框中选择。

执行轨迹

执行轨迹(Execution Trace) 堆栈显示执行了的节点列表,其中最新的节点位于顶部。

蓝图调试 - 执行轨迹堆栈

在调试时,此列表会随着您对图表的单步调试而更新。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消