调试

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

Studio 提供了许多在集成开发环境 (IDE) 中常见的调试工具。这些工具可以帮助您解决错误,并在它们运奔跑时逐行检查脚本。调试信息显示在观察调用堆断点输出窗口中,供您检查。

一般工作流程

如果您在体验中发现问题或想验证它是否如您所意愿运行,您可以按照以下步骤调试与之相关的代码:

  1. 插入断点在你想要检查的代码行上。

  2. 脚本 选项卡中,单击 播放运行 在测试选项卡中以启动游戏测试会话,也称为调试会话。

    Playtest options in Script tab.
  3. 当脚本击中断点时,播放测试会话暂停。检查观察调用堆输出窗口,以帮助您诊断和理解问题。

  4. 在尚未执行的代码行上插入额外的断点以检查额外的数据。禁用删除不再需要的断点。

  5. 脚本 选项卡中,单击 停止 以结束调试会话。

重复以前的步骤,直到你解决问题或找到其根源为止。当你学习一般工作流程时,你可以配置断点,只有在满足某些条件时才打印消息到 输出 窗口,并仅在客户端或服务器上运行。了解更多信息,请参阅断点配置

插入断点

断点是检查点,可以暂停或“断开”您的脚本在特定行的执行。您可以使用暂停来检查和调试您的体验,观察变量,并检查调用堆。断点是调试函数最有效的方法之一,因此它们是最重要的调试工具之一。您可以在执行代验证码的任何行中插入断点。

要在代验证码行中插入标准断点,左键单击其行号右侧的边缘。您还可以右击边缘并单击插入断点。断点显示为红点。要禁用它,单击点。

Breakpoint in gutter is a red dot

步骤通过代验证码

如果你在脚本中的某行插入了断点,那么脚本在执行该行之前会暂停。一个黄色箭头称为“调试器”,表示下一行代码将执行。

Active breakpoint in the debugger shows yellow arrow

当脚本暂停时,使用 脚本 选项卡中的按钮一次步行通过它们来执行以下代码一行。按钮也会出现在 调用堆 窗口的左上角。当你步过代验证码时,监控当前线程执行时您的体验是如何改变的。

Debugging tools indicated in Script tab

下表总结了三种步骤通过验证码的方法。在你击中断点后继续执行代码后,单击 继续脚本 选项卡中。

按钮行动快捷方式描述
Button to step into a line of code 步入 F11 步入 按钮将调试器移至当前行上的函数代码。如果当前行上没有函数,调试器移至下一行。
Button to step over a line of code 步过 F10 步过 按钮将调试器移至下一行代验证码, 不移入函数。
Button to step out of a line of code 步出 Shift F11 步出 按钮将调试器从当前函数移出并移至函数调用后的下一行代码。如果当前行不在函数内,调试器移至下一行。

检查代验证码

当断点在游戏测试期间暂停体验时,您可以检查观看窗口、调用堆窗口、输出窗口和脚本编辑器以查找变量值和函数执行的信息。有了这些信息,你可以找到体验中问题的根源。

观看

观看 窗口有两个选项卡: 变量我的表变量 选项卡显示当前范围内的变量信息, 我的手表 选项卡显示您定义的变量或式的值。两个选项卡都在行执行之前显示信息。

变量 选项卡 有以下列栏:

  • 名称 – 变量的声明名称。

  • 范围 – 变量的范围:可以“看到”并访问的地方,例如本地、全球或上值。

  • 值 – 变量当前值。

  • 数据类型 – 变量的数据类型。 我的手表 选项卡具有以下列栏:

  • 表达式 – 你想要监视的表达式。

  • 值 – 当前值的式子。

  • 数据类型 – 式的数据类型。

变量 选项卡中,您可以通过单击过滤器标志来过滤变量范围。您还可以通过单击列的名称来排序行,以进行排序。观察窗口提供扩展和收缩的表视图。

Watch Window with variable values

要在观察窗口中检查代码:

  1. 如果 观看 窗口未打开,请在 视图 选项卡中单击 观看

  2. 当你的播放测试会话在断点处暂停时,想想你希望当前线如何在该脚本中更改变量值。

  3. 当你步过代验证码时,观察变量值在 变量 选项卡中如何更改。如果您想观看不在变量选项卡中的表达式,请打开 我的手表 选项卡。单击表达式栏中的空行,然后在其中输入表达式。如果您想在脚本编辑器中观察变量,请双击变量名称,右击,然后单击 添加观察

  4. 将变量和表达式的值与你期望的值和你在观察窗口中看到的值进行比较。如果您期望变量的更改与实际更改之间存在差异,那么变量或与它们交互的函数可能会导致问题或错误。

调用堆

调用堆窗口显示当调试器达到断点时将执行哪一行代码。调用堆表示您从哪个线调用函数,如果您在其他函数中调用函数,则调用函数的顺序和您调用其他函数的线。调用堆的顶层函数是最后调用且第一个执行的。您可以使用调用堆来检查您的脚本中函数调用的顺序是否与您的功能模型匹配。

Call Stack in Studio

如果您在不同脚本中有多个断点,它们可能会同时暂停播放测试会话。您可以通过单击调用堆窗口中脚本名称旁边的箭头跳转到断点。如果您单击 继续 ,那么您将跳过所有在同一时间暂停的断点。

Call Stack with multiple breakpoints

要在调试会话期间在调用堆窗口中检查代码:

  1. 如果 调用堆 窗口未打开,请在 视图 选项卡中单击 调用堆

  2. 当您的体验在断点处暂停时,请考虑您希望函数调用顺序在该脚本中如何排列。

    Script Editor with two functions and one breakpoint
  3. 调用堆显示函数调用的顺序。如果断点位于函数内,调用堆会显示哪个函数调用该函数,如果有。调用堆也显示每个函数的名称和行号。单击行以跳转到函数。

    Click in Call Stack to jump to line
  4. 比较你在步骤 2 中想到的函数调用顺序和步骤 3 的实际顺序。如果存在任何差异,那么在你期望代码行为方式与实际行为方式之间就存在差异,从而导致潜在问题和错误。

输出

从视图选项卡访问的输出窗口显示从运行脚本中捕获的错误、来自 Roblox 引擎的消息、来自调用 的错误以及来自调用 的错误和错误。

脚本编辑器

调试器与 脚本编辑器 集成。当您的体验在脚本中的断点处暂停时,您可以将鼠标悬停在变量名称上,查看其值。例如,你可以查看函数调用中传递为参数的表的值。

Mouseover a variable in Script Editor to show value

断点配置

您可以配置断点,只有满足特定条件才打印消息到 输出 窗口,并仅在客户端或服务器上运行。您还可以将这些配置混合在一起,最好满足您的调试需求。

编辑断点

您可以随时编辑断点配置,包括在游戏测试期间。如果你在游戏测试会话期间编辑断点,即使你已经完成它,编辑仍然存在。您还可以编辑正在暂停您的游戏测试会话的断点,但更改不会在下一次游戏测试会话之前生效。

要编辑断点配置:

  1. 右击断点,然后单击 编辑断点

    Right click to edit a breakpoint in Studio
  2. 编辑断点 窗口中,配置断点以您所需的方式。

    Edit Breakpoint window in Studio

条件、日志消信息和选项

对于每个断点,您可以设置其 条件日志消息继续执行上下文条件 是决定是否激活断点的表达式。条件是可选的。如果条件为空,断点始终激活。如果条件存在,那么断点只会激活,如果条件是真实的。例如,如果你只希望断点激活,如果变量 n 等于 42,那么设置条件为 n == 42。条件对于调试函数如何执行具有特定值的情况或仅在循环中断某些执行有用。 日志消息 是当条件为真时打印到输出窗口的表达式。日志消息的格式与 print() 语句的参数相同。例如,将日志消息设置为 "The value of n:", n 打印与 print("The value of n:", n) 相同的消息。您可以无需停止执行添加和删除日志消息,与打印声明不同。 继续执行 选项决定是否在激活时暂停脚本的断点。如果您想在停止执行之前记录变量或表达式的值,这很有用。此选项默认为禁用。

断点的 上下文 决定了断点是否应在客户端、服务器或编辑中激活。如果上下文是客户端,那么在客户端脚本中触发断点。如果上下文是服务器,那么在服务器端脚本中触发断点。如果上下文是编辑,那么在调试插件时触发断点。如果您单击自定义上下文,窗口会显示当前上下文。

Edit Breakpoint Window shows Custom Context

条件断点和日志点

工作室提供命名的断点变体来加快断点插入速度。要插入命名变体,右击其行号右侧的边缘,然后单击你想要插入的变体。

Right click to insert a breakpoint

一个 条件断点 是一个带有 条件继续执行 关闭的断点。条件断点只有在条件真实时才暂停脚本,因此它们对确定变量具有某些值时调试函数的方式有用。条件断点使用行执行前变量的值。当你插入条件断点时,你的鼠标将聚焦在 条件 选项上,以便你快速设置。

一个 记录点 是启用了 日志消息继续执行 的断点。记录点将脚本消息发送到 输出 窗口,而不暂停您的脚本,因此它们对变量值调试有用。日志点使用行执行前变量的值。当你插入一个记录点时,你的鼠标将专注于 日志消息 ,以便你快速设置它。

禁用断点

有许多方法可以禁用和重新启用断点:

  • 单击断点的标志。
  • 编辑断点并切换其启用复选框。
  • 右击断点标志,然后单击禁用断点或启用断点。

删除断点

要删除断点,单击其标志中的中间按钮。您也可以右击其图标然后单击 删除断点

断点窗口

断点窗口显示您体验中的所有断点。要打开断点窗口,请单击 Studio 顶部的“查看”选项卡,然后单击“断点”。

Breakpoints window in Studio

断点窗口具有以下列栏:未命名、脚本、行、源行、条件、日志消息和继续执行。无标签的脚本和线列栏始终显示,但您可以通过单击窗口右上角的三个点来切换其他列栏。

在未标记栏中,(x3)标签表示同一行代验证码上的断点数量,图标表示断点配置。同一行上的断点共享相同的条件、日志消息和继续执行,但在上下文中各不相同。您可以在断点窗口编辑断点的配置。例如,您可以通过编辑其条件栏中的文本区域来编辑断点的条件。

Edit the Condition of a Breakpoint in the Breakpoints Window

您可以通过单击启用的列中的断点图标来启用或禁用断点。您还可以单击以下按钮来启用、停用和删除一些或所有断点。

按钮行动
Button to disable all breakpoints禁用所有断点。如果任何断点被禁用,请启用所全部断点。
Button to delete all breakpoints删除所有断点。

断点图标

断点标志取决于是否启用、是否有条件和是否有记录消信息。如果断点有记录消信息,那么无论它是否有条件,它都会显示为记录点。

名称图标启用条件记录消息
断点
条件断点
记录点也许
没有也许

额外的调试工具

除了调试器外,Studio 还为您提供额外的调试工具来解决体验中的问题和错误。

命令栏

命令栏 允许您在体验运行时运行 Luau 命令。它可以在 Studio 的 视图 选项卡和 开发者控制台 中使用。

开发者控制台

开发者控制台 提供了包括客户端和服务器输出、内存使用、网络性能等在内的广泛细节 要在测试或玩体验时打开开发者控制台,请在聊天中输入 /console 或按下 F9 。了解更多信息,请参阅开发者控制台

日志文件

当脚本在 Studio 或 Player App用中打印或发生错误时,应用将消息记录在本地文件系统的日志文件中。这些文件位于不同位置,取决于操作系统。

窗口

要在 Windows 上访问日志文件:

  1. 打开 文件管理器
  2. 导航到 %LOCALAPPDATA%\Roblox\logs 目录。
  3. 双击日志以打开它。具有相同 XXXXX 值的日志来自同一工作室会话。

Mac

要在 Mac 上访问日志文件:

  1. 打开 寻找器
  2. 在菜单栏中,选择 前往 > 前往文件夹...
  3. 在对话框中,输入 ~/Library/Logs/Roblox .
  4. 双击结果以导航到 Roblox 日志目录。
  5. 在目录内,双击日志以打开它。

iOS

您可以使用 Mac 或使用 iOS 设备收集 iOS 日志。

要在 Mac 上访问 iOS 日志文件:

  1. 将 iOS 设备连接到 Mac。
  2. 打开 寻找器
  3. 导航到 实用程序 并打开 终端应用程序
  4. 要在控制台应用程序中填充实时日志,请从侧栏中选择 iOS 设备,单击 开始 按钮,然后在 iOS 设备上重现问题。
  5. 要在终端应用中填充归档日志,请在 sudo log collect --device-name "[iOS Device Name]" 中运行 **** 。确保设备名称中没有 apostrophes,否则运行命令时可能会出错。

Android

要在 Android 上访问日志文件:

  1. 导航到 设置 > 系统 > 开发者选项
  2. 切换 开发者选项
  3. 在计算机上,下载并安装 Android Studio
  4. 在 Android Studio 中,单击 Logcat
  5. 将Android设备连接到计算机,自动向Logcat添加日志。