开发模式
开发模式是 MiXianTu 的一个调试开关,它不会改变游戏玩法,也不是作弊开关。它只影响:
- 完整公式报错:在正式包里只记一条警告,最多 512 条;在开发模式下日志里带上完整堆栈,能看出是哪个公式、哪一行触发的。
- 信息面板溢出报告:在正式包里不报;在开发模式下名字或数值被折成多行的条目,记一条错误日志。
- 内部追踪日志:在正式包里不打印;在开发模式下触发派发、订阅重建、铸造动作、书页贴图这些逐条打进日志。
- 自交易:在正式包里拒绝自己和自己交易,在开发模式下可以打开交易界面,走和别人交易完全相同的流程。
- 模块性能分析:在正式包里默认关闭,可用命令开启;在开发模式下服务器启动时自动开始记录。
因为这些报错会频繁打印日志,开发模式下的日志比正式包大得多。自交易和性能分析会增加服务器 tick 的耗时,所以在正式运行环境里默认关闭。
开启开发模式
| 你装的是 | 怎么做 |
|---|---|
| 正式运行环境 | 打开服务端配置「调试 → 调试模式」,默认关闭。单人游戏里使用游戏内的服务端配置界面。 |
| 开发启动环境 | 开发模式始终开启,不需要改配置。 |
自交易、日志等功能读取当前开关,改完即时生效。性能分析的自动开启只在服务器启动时判断:运行中才打开调试模式,要执行 /mxt debug on 开始记录。
关闭配置开关只对正式运行环境有效。性能分析还可以单独用 /mxt debug off 关闭;在开发环境下也有效,直到手动开启或下次启动服务器。
性能分析使用 /mxt debug on 也可以开启,但它只在当前服务端 tick 之后开始记录,不会回溯。开发模式在服务器启动时就开始记录,所以能看到启动时的耗时。
连别人的服务器
连别人的服务器时:
- 服务端说了算的入口(自己和自己交易、公式报错的日志、内部追踪日志、性能分析的启动默认状态)看那台服务器的开关。
- 客户端自己渲染的东西(信息面板的溢出报告)看你本机那份配置。
性能分析
性能分析命令和界面数据接收都需要 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 模组。
常见错误
| 现象 | 原因 |
|---|---|
| 开发环境找不到“关掉”的办法 | 开发模式恒为开启;性能分析仍可单独用 /mxt debug off 关闭。 |
| 开关一开日志里刷出一大堆 Trigger signal | 这就是开关的作用:内部追踪本来就是逐条打的。关掉开关就停。 |
| 打开开关后仍然没有 DEBUG 级日志 | 开关不打开调试级别,它只管自己那几类消息。 |
| 打开图表后显示性能分析已关闭 | 打开界面不会开启记录,执行 /mxt debug on。 |
| 运行中打开调试模式后没有自动开始记录 | 自动开启只在服务器启动时判断,当前会话使用 /mxt debug on。 |
找不到 /mxt debug 或无法接收图表数据 | 需要 3 级管理员权限;GUI 必须由玩家打开。 |
| 两行柱子差不多高,毫秒数却差很多 | 各行纵轴上限独立,按数值比较耗时。 |