微型调试器

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

微型调试器 是Roblox Studio和Roblox客户端中可用的性能优化和故障排除工具。它为 任务调度器 任务提供详细的时间信息,称为 标签

  • 对于常见任务的列表,请参阅标签参考
  • 要了解使用微调器识别性能问题的步骤示例,请参阅微调器走势

微型调试器基础

要打开微调试器,请在 Studio 或客户端中按下 Ctrl Alt F6 ( F6 ) 。您还可以在客户端使用设置菜单。

打开时,菜单栏会显示在 3D 视图顶部。在默认模式下,移动条图显示任务调度器的每个框中使用的时间。

The Microprofiler frame graph, showing blue frames and detailed frame information.

酒吧通常应该位于图的中间,但你可能会看到突然的增加(快速增加值)。尖峰表示需要更多时间来执行某些任务,通常是因为工作量增加了。例实例,创建大量移动部件需要从物理模拟中进行更多工作,然后需要更多时间来处理运动和零件接触。以下图像显示了尖峰的例子:

The Microprofiler with several bars higher than others.

要暂停记录框的录制,请按 Ctrl P ( P ) 或单击菜单栏中的 暂停 。暂停时,时间线出现,您可以通过单击或拖动图表来导航框架。

了解有关各种视图和如何导航 MicroProfiler 接口的完整摘要,请参阅 MicroProfiler 模式

线程

像许多程序一样,Roblox 使用多个线程同时执行多个任务序列。在微型调试器 详细模式 中,您可以在左侧看到每个线程的标签。

The lefthand side of the Microprofiler detailed view, with rows for threads.

有三种主线程类型:

  • 主要/渲染 : 也许不直观,在 CPU 上运行。处理输入、Humanoids、动画/过渡、物理所有权、声音和等待脚本重新启动。还更新工作室接口并协调其他线程。

  • 工作者 (“RBX 工作者”):帮助主线进行网络、物理和路径探索。由于现代 CPU 中的核心数量,你可能有很多工作线程,其中大多数处于睡眠状态,在任何时候。

  • 渲染 (“GPU”):遵循“准备、执行、呈现”的逻辑。与设备的图形处理单元(GPU)进行通信。

    • 准备:来自主线程的信息用于更新渲染模型。
    • 执行:发出问题渲染命令,包括 2D 界面。
    • 现在:与 GPU 同步。

自定义个人资料

如果你的脚本运行着复杂的任务,你可以对代码的关键部分进行个人化,以确保它们不会花太长时间。将代码包装在 debug.profilebegin()debug.profileend() 中,将所有功能调用之间的所有工作都完成,然后在微调试器时间线上创建标签。

努力脚本

debug.profilebegin("Hard Work")
-- 要被评估的代码
debug.profileend()
A custom label on the detailed view of the MicroProfiler.

微调试器标签可用的内存有限。如果此内存耗尽,自定义调试器标签可能不会在时间线中显示为具有意义的名称。使用更少的标签来避免这个问题。如果您不再需要对代验证码的某部分进行 profiling,请评论或移除调用这些函数的调用。

例子

下面的代码示例连接一个假函数到 RunService.PreSimulation 事件,该事件每个框架都运行。任何完成这一点通常都应该尽可能高效地运行,因此此函数是一个很好的候选人进行调试。


local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- 例如辛苦的工作:交换两个变量 200,000 次
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)

当你运行体验并暂停微调试器(Ctrl P P)时,自定义标签会显示在 游戏步骤 标签下。

Many labels on the MicroProfiler, with a custom label taking up the majority of the processing time.

从时间线上的持续时间来看,你可以告诉自己函数比其他操作使用了更多的处理时间。

保存框架数据

如果您想保存一组框架数据供稍后查看(或与其他人分享),请使用 丢弃 菜单。引擎将框架数据保存到 Roblox 日志目录中的一个名为 microprofile-<date>-<time>.html 的文件。

  • 在 Windows 上,检查 %LOCALAPPDATA%\Roblox\logs

    如果您使用了通用 Windows 平台(UWP)应用程App,请检查 \Users\<username>\AppData\Local\Packages\ROBLOXCORPORATION.ROBLOX_<hash>\LocalState\logs\

  • 在 macOS 上,检查 ~/Library/Logs/Roblox

这些 HTML 文件使用相同的 基于网页的用户界面 作为 为移动设备提供实时连接服务器卸载 的 。

个人资料移动设备

要从移动客户端访问微型调试器,您的移动设备必须连接到与开发机相同的 网络

在移动设备的 设置 菜单中启用微型调试器。启用后,菜单会显示一个 IP 地址和一个端口号。

A picture of the Settings menu on mobile, showing how to enable the MicroProfiler.

例如,上面的截图中,地址是 192.168.1.166 ,并且端口是 1338 。从同一网络上的计算机导航到 http://192.168.1.166:1338 为 MicroProfiler 用户界面的 网络版

The MicroProfiler web view.

评论服务器

除了标准客户端 MicroProfiler 外,您还可以使用服务器 MicroProfiler 进行服务器活动的快速备份。

  1. 在你拥有编辑权限的体验中,打开开发者控制台,使用 CtrlAltF9 打开。

  2. 在下拉菜单中,选择 微型调试器

  3. 服务器调试器 部分中,指定每秒钟的帧数(最大值为 60)和要调试的秒数(最大值为 4)。

  4. 点击 开始录制

    The Developer Console MicroProfiler screen.

    几秒钟后,开发者控制台提供文件的路径,这与一个 标准 dump 的路径相同。

使用网页用户界面

一般来说,微调试器网页用户界面与 详细模式 相似,但它有一些额外功能:

  • 除了按群组过滤外,您还可以按线程过滤。

  • 使用 Ctrl F / F 跳到垃圾桶中占用最多时间的任务发生。例如, computeLightingPerform 在每个框转储中运行。如果您在包含 128 帧的 dump 中搜索它,您可以跳到需要最长时间才能完成的框架。

  • 使用 X射线 菜单启用或禁用内存分配的颜色编码。

    The MicroProfiler web view with x-ray enabled.
    • 主条图内的更轻的框架表示更高的内存分配。
    • 预览栏的更轻部分和时间线上的更轻标签表示具有更高内存分配的框架部分。
    • 在X射线模式下,按C显示分配数量而不是分配数量的内存总体积
  • 使用 导出 菜单导出一个 CPU 或内存火焰图,这是一种专门的视觉化方式,可以将包含在垃圾收集中的所有调用堆聚合在一起,保持父子关系,并根据持续时间进行缩放。火焰图特别适合用于识别不需要特别长时间运行(因此很难注意)但运行频率很高的任务,其处理时间因此变得重要。

    The MicroProfiler flame graph in the web UI.

    您还可以在 Studio 中创建火焰图,虽然仅用于脚本(执行时间和内存分配)。与基于网页的火焰图相比,Studio 中的火焰图是从上到下而不是从下到上的,并支持更长的捕捉时间。

    The MicroProfiler flame graph in Studio.
  • 将第二个垃圾文件拖放到网页用户界面生成差异火焰图,可以帮助您识别随时间推移对体验性能的改进或退步。单击 结合和比较 导出新的 HTML 文件。

    The MicroProfiler diff flame graph builder showing the left and right sides.

    差异火焰图显示那些消耗更多 CPU 或内存的垃圾(左侧或右侧),更亮的颜色表示更大的差异。

    The MicroProfiler diff flame graph.