开发模式
你要搭建什么
准备一个便于复现问题的环境:自己和自己交易、查看完整的公式报错与内部追踪日志,并用模块性能分析界面定位耗时集中的模块。本篇不需要编写数据包。
第 1 步 —— 开启开发模式
| 你装的是 | 怎么做 |
|---|---|
| 正式运行环境 | 打开服务端配置「调试 → 调试模式」,默认关闭。单人游戏里使用游戏内的服务端配置界面。 |
| 开发启动环境 | 开发模式始终开启,不需要改配置。 |
自交易、日志等功能读取当前开关,改完即时生效。性能分析的自动开启只在服务器启动时判断:运行中才打开调试模式,要执行 /mxt debug on 开始记录。
关闭配置开关只对正式运行环境有效。性能分析还可以单独用 /mxt debug off 关闭;在开发环境下也有效,直到手动开启或下次启动服务器。
第 2 步 —— 使用调试功能
| 入口 | 正式包 | 开发模式 |
|---|---|---|
| 自己和自己交易 | /trade 指向自己会被拒绝 | 直接打开交易界面,一个玩家同时是两边 |
| 公式报错 | 同一条消息只记一行警告,最多 512 条 | 完整堆栈打进日志,不合并、不封顶 |
| 信息面板溢出报告 | 不报 | 名字或数值被折成多行的条目,记一条错误日志 |
| 内部追踪日志 | 不打印 | 触发派发、订阅重建、铸造动作、书页贴图这些逐条打进日志 |
| 模块性能分析 | 默认关闭,可用命令开启 | 服务器启动时自动开始记录 |
自己和自己交易用来在没有第二个人时调交易界面与结算,走的是和别人交易完全相同的流程,双方还是各自的钱袋,没有凭空多出来的东西。
公式报错指的是一份公式在运行时才算得出来的问题,比如除零、读到不存在的变量。正式包只告诉你"这里算错了";开发模式下日志里带上完整堆栈,能看出是哪个公式、哪一行触发的。
信息面板溢出报告是排版检查:信息面板的某一列装不下某个条目的名字或数值、只能折成两行以上时,记一条错误。同一条内容只报一次,不会刷屏。
内部追踪日志是给写数据包和写脚本的人看的过程记录:一个信号派发给了谁、一个身体的订阅重建成了几条、一次铸造动作选了什么。正常游玩不需要它们,所以正式包里一条都不打;开发模式逐条打,不封顶。
对日志与玩法的影响
- 不改日志等级:开关不打开调试级别,只决定上面那几类消息打不打、同一条消息最多记几条。数据包写错时那类写给所有人的日志,两种模式都照打。
- 不加命令、不发物品、不动数值:没有任何玩法效果。
- 不是作弊开关:自交易照常结算,公式报错也不会被"修好"。
连别人的服务器
连别人的服务器时:
- 服务端说了算的入口(自己和自己交易、公式报错的日志、内部追踪日志、性能分析的启动默认状态)看那台服务器的开关。
- 客户端自己渲染的东西(信息面板的溢出报告)看你本机那份配置。
第 3 步 —— 查看模块耗时
性能分析命令和界面数据接收都需要 3 级管理员权限(admin);打开界面还要求由玩家执行。先开始记录,再打开界面:
/mxt debug on
/mxt debug gui开发模式在服务器启动时已经自动开始记录,可以直接执行第二条。打开界面本身不会开启记录,也不要求先开启整个开发模式。
列表与图表
| 位置 | 内容与操作 |
|---|---|
| 顶部状态 | 最近 240 tick 的窗口与丢弃批次数,或记录关闭、等待数据等状态。 |
| 顶部按钮 | 按模块、最小、平均或最大耗时排序,用升降序按钮切换方向。 |
| 每行左侧 | 模块名称,以及 min / avg / max,单位为毫秒。 |
| 每行右侧 | 固定 240 列的柱图,每列对应一个 tick;纵轴上限标在图表左上侧。 |
| 列表右侧 | 点击滚动条轨道或拖动滑块上下查看,也可以在列表上滚动鼠标滚轮;顶部按钮保持固定。 |
窗口保留最近 240 tick,在 20 TPS 下约为 12 秒。min、avg、max 是这个窗口内单个 tick 的最小、平均、最大耗时;完整的空闲 tick 计为零,不完整的 tick 不参与统计。窄窗口会把模块名和统计移到图表上方,行内没有悬停提示。
每行纵轴按自己的最大耗时调整,比较模块时要看毫秒数。绿色表示低于 10 ms,黄色表示 10–50 ms,红色表示至少 50 ms。父模块包含子调用的耗时,各行不能相加当作整个服务器的 tick 耗时。
单人游戏未开放到局域网时,界面直接读取本地数据,每个服务端 tick 更新,不受发包周期限制。多人游戏和已开放局域网的世界每 5 个服务端 tick 同步一次,仅在界面打开时发送;关闭界面、断线或失去权限会停止同步。关闭界面后,已经开启的耗时记录继续运行;结束检查时用 /mxt debug off 停止记录。
按需查询分位数
需要比较常态耗时与偶发高峰时,关闭图表后也可以查询:
/mxt debug status server/cost server/economy/change用空格指定多个模块,支持补全;省略参数查询全部模块。输出包含最近 240 tick 的 min、avg、max、50%、95%、99%、调用次数和有效 tick 数。分位数只在执行查询时计算,界面只显示 min / avg / max。
图表用于快速定位本模组服务端模块的耗时。更准确的分析,以及客户端渲染或其他模组的问题,使用 spark 模组。
在游戏里验证
打开开关后,/trade <自己的名字> 直接弹出交易界面。正式运行环境下关掉开关再来一次,会收到“不能和自己交易”的提示。
执行 /mxt debug on 和 /mxt debug gui,触发一次修炼、技能或其他模块行为,检查对应行的统计与柱图是否变化。切换排序并滚动列表,顶部按钮应保持固定。最后关闭界面,执行 /mxt debug status 查看同一窗口的统计,再用 /mxt debug off 结束记录。
常见错误
| 现象 | 原因 |
|---|---|
| 开关打开了却还是不能和自己交易 | 连的是别人的服务器,那台服务器没开这个开关。 |
| 开发环境找不到“关掉”的办法 | 开发模式恒为开启;性能分析仍可单独用 /mxt debug off 关闭。 |
| 开关一开日志里刷出一大堆 Trigger signal | 这就是开关的作用:内部追踪本来就是逐条打的。关掉开关就停。 |
| 打开开关后仍然没有 DEBUG 级日志 | 开关不打开调试级别,它只管自己那几类消息。 |
| 打开图表后显示性能分析已关闭 | 打开界面不会开启记录,执行 /mxt debug on。 |
| 运行中打开调试模式后没有自动开始记录 | 自动开启只在服务器启动时判断,当前会话使用 /mxt debug on。 |
找不到 /mxt debug 或无法接收图表数据 | 需要 3 级管理员权限;GUI 必须由玩家打开。 |
| 两行柱子差不多高,毫秒数却差很多 | 各行纵轴上限独立,按数值比较耗时。 |