Mod troubleshooting

本页面讲述的内容长期有效

排除故障是mod开发中重要的一部分,包括对崩溃、bug和其他问题的排除。

概述

有两种错误——致命性错误与非致命性的。

致命性错误发生于游戏无法加载一个关键数据,并且在缺乏此数据时就无法运行的情况下。这会导致闪退(Crash To Desktop)。当致命性错误发生时,文件exceptions.log将会增添一行记录. 通常它们会发生于游戏加载过程中,或者进行某项特定操作时。

非致命性错误发生于游戏在运行时遭遇到了无效数据或者错误的语法。这些错误被记录于error.log

测试

在Debug流程中可以使用如下的控制台代码:eventobserverun

run 命令对于测试效果非常有用,无需重新加载游戏。它也使设置测试场景变得非常容易,而不需要在mod本身中引入混乱的代码。

observe 命令在你想测试你的mod在游戏中的稳定性时非常有用。通过成为一个观察者,你可以让游戏在没有你的影响的情况下运行,使其更容易检测到不定期发生的问题。

加载

在加载游戏时会先后进入以下过程,这些描述出现于加载界面顶端。本地化文件位于:/Europa Universalis IV/localisation/text_l_english.yml/Europa Universalis IV/localisation/EU4_l_english.yml

Step 步骤
Loading Databases 读取数据库
Initializing Maplogic 初始化地图逻辑……
Loading Databases... 读取数据库……
Loading History Files... 载入历史文件……
Loading Sounds... 载入音乐……
Loading Events... 载入事件……
Loading GUI Definitions... 读取用户界面……
Loads Flags... 载入旗帜……
Creating Checksum... 创建校验和……
Loading Graphics... 载入图像……
Creating Province # 创建省份 #
Creating Shaders... 载入地图中(创建阴影)……
Creating Terrain... 载入地图中(创建地形)……
Creating Borders... 载入地图中(创建国界)……
Creating Straits... 载入地图中(创建海峡)……
Creating Textures... 载入地图中(创建纹理)……
Creating Trees... 载入地图中(创建树木)……
Creating Rivers... 载入地图中(创建河流)……
Creating objects... 载入地图中(创建物件)……
Initializing Game... 初始化游戏……

Log 文件

游戏将各种日志文件存储在您的EU4用户文件夹中:(\\documents\paradox interactive\europa universalis iv\logs\.)。每次游戏开始时都会覆盖这些内容。

要启用完整的错误日志记录,请通过STEAM中的“设置启动选项”添加-debug命令。

文件 描述 实用性
ai.log 打印玩家的国家选择,然后是 Starting AI 行。
error.log 打印各种非致命错误。许多错误可以被忽略,尽管几乎所有与 common 文件夹中的文件有关的错误都应该被修复。
error_old.log 上一次游戏启动时的 error.log
error_old_old.log 前一次游戏启动时的 error.log
exceptions.log 当游戏崩溃到桌面时,打印出堆栈跟踪记录。目前只打印十六进制的地址,使这个文件相当无用。
executedcommands.log 打印玩家和AI使用的内部命令。
game.log 打印各国在游戏中采取的行动。当崩溃是由特定的行动引起的时候很有用。
graphics.log 打印与位置有关的图形错误。
local_temp.log
memory.log 打印设置过程中使用的内存。对加载过程中的崩溃很有用,可以看到游戏何时崩溃。
message.log 打印当前会话的会话信息。
profiling.log 如果使用profiling.exe文件,则打印分析输出。
random.log
random02.log
receivedcommands.log 打印多人游戏中玩家收到的内部命令。
sentcommands.log 打印多人游戏中玩家发送的内部命令。
setup.log 打印进程中每个部分的设置加载完成情况。对于发现哪个文件可能导致崩溃非常有用。
setup_error.log 打印 /Europa Universalis IV/common/countries 文件中的错误。通常情况下,这些错误的重要性不高。
system.log 打印运行EU4的系统信息。
system_interface.log 打印界面错误。
text.log Prints asserts on localization keys.
time.log 打印各种加载步骤完成所需的时间,以及刻度间隔。对于加载过程中的崩溃非常有用,可以看到游戏何时崩溃。

除错

一般来说,在调试的时候,你想缩小崩溃的可能原因。这就是为什么最好在每次修改后运行你的mod,这样任何问题都会立即显现出来,而且你可以很容易地找到原因,因为它是你最后编辑的文件。

如果这是不可能的,那么你要 隔离 潜在的原因。这可以通过将可疑的文件和文件夹从你的mod文件夹移到一个临时文件夹,然后在没有它们的情况下启动mod来实现。这需要对每个文件如何一起工作有很好的了解,以便你可以安全地隔离文件和文件夹,而使依赖关系损坏。

通常情况下,你可以很容易地隔离 eventsdecisionsmissionsinterface 文件夹,而不用太担心。然后在 common 文件夹中,逐一删除文件或文件夹,每次都重新启动游戏,以确定哪个文件或文件夹导致问题。如果没有,那么很可能问题出在 historymap 文件夹中。在整个过程中重复这个操作即可。

崩溃

如果没有丰富的修改知识,大多数导致崩溃回桌面的致命错误是很难调试的。下面的列表是已知的崩溃,以帮助修改者调试:

Crash Fix
在 "读取数据库" (Loading Database) 期间 如果你使用的是 defines.lua ,检查你是否包含了原版文件包含的所有条目。

检查是否有对不存在的文件的引用。

  • country_tags 中的一个标签不能引用不存在的文件。
  • 确保所有定义的殖民地地区至少有一个省的分配。
  • 脚本效果/元脚本编码错误(导致堆栈溢出异常)-->条件输入使用不当,[]用于某些不属于条件输入的东西,例如本地化,还有非封闭的 $input$ 就像 $input
在 "初始化地图逻辑" (Initializing Maplogic) 期间 检查gamelogic地图图像是否已经以正确的格式保存。确保使用的地图文件遵循地图修改中列出的规则。
  • default.map 的省份限制不高于 define.csv 中最后一个省份的ID。
  • default.map 中的一个省份ID不再存在于 define.csv 中。
  • adjacencies.txt 中的一个省份的ID不再存在于 define.csv 中。
  • area.txt 中的一个省份的ID不再存在于 define.csv 中。
  • climate.txt 中的一个省份的ID不再存在于 define.csv 中。
  • continent.txt 中的一个省份的ID不再存在于 definition.csv 中。
  • terrain.txt 中的一个省份的ID不再存在于 define.csv 中。
  • trade_winds.txt 中的一个省份的ID不再存在于 define.csv 中。
  • area.txt 中的一个省份的ID不再存在于 define.csv 中。
  • terrain.bmp 有一个缺失或损坏的颜色表。
  • rivers.bmp 有一个缺失或损坏的颜色表。
  • trees.bmp 有一个缺失或损坏的颜色表。
  • 地图尺寸不是128的乘积。
  • provincial.bmp 超过52MB。
  • provinces.bmp 包含的省份太大。
在 "载入历史文件" (Loading History Files...) 期间
在 "载入旗帜" (Loads Flags...) 期间 检查历史文件是否引用了任何缺失的国家标签(特别是diplomacy文件夹)。
在 "载入图像" (Loading Graphics...) 期间 检查图形地图图像是否已经以正确的格式保存。确保使用的地图文件遵循地图修改中列出的准则。
在 "载入地图(创建海峡)" (Loading Map (Creating Straits)...) 期间 检查 adjacencies.txt 文件是否列出有效的海峡。
在 "载入地图(创建边界)" (Loading Map (Creating borders)...) 期间 检查 default.map 的max_provinces数值是否为definition.csv已定义的最大省份序号+1
当点击单人游戏时 这一问题是因为可能增加了省份,但未添加新增的省份代码到map/area.txt、map/continent.txt与common/tradenodes所导致
在开始界面里点击游戏 问题可能出在 common 文件夹中。
  • 缺少必要文件中的条目,如 static_modifiers
  • 缺少效果或触发器中使用的修改器的条目。

历史文件:

  • history/countries 中定义的一个国家首都引用了一个省份的id,但在 map/provinces.bmp 中没有像素。
点击一个省份 * 确保该省属于 continent.txt 中的一个大陆。
  • 确保该省属于 area.txt 中的一个地区。
  • 确保该省在 definition.csv 中被定义。
使用3级以上政府等级时的国家设计者政府标签 nationadesignerview.gui 文件需要进行编辑,以便为每一个新的政府级别增加 icon_gov_desc_*gov_desc_*
Crash on Hover in an Interface Typically caused by a clause missing from the relevant files, i.e. the army professionalism static modifiers when hovering over the Hire General button.
尝试迁都 通常是由于 continent.txt 中的省份缺失或编号错误造成的。
悬停在列强列表中的一个国家上 也经常是由于 continent.txt 中的省份丢失或编号错误造成的。

当在游戏时间流逝时崩溃 ·检查history/countries中是否缺乏国家文件或国家文件中政体书写错误

检查是否有未归属area的province(表格无法编辑先写这了)

这个过程几乎总是能让你发现崩溃的原因,尽管它很乏味。

性能分析

从1.23补丁开始,Europa Universalis IV与正常游戏一起内置了一个性能分析器。这个工具对于那些想要测量和诊断他们的mod中的不良性能的modder来说是非常有用的。

要使用分析器,你需要通过点击游戏安装文件夹中的 eu4_profiling.exe 来启动游戏启动器。这将启动游戏启动器,然后你可以用它来选择你的MOD并启动游戏。

进入游戏后,让游戏运行到一个合适的时间,然后打开控制台,输入 dump_script_profiling 以写入 logs 文件夹中的 profiling.log 中。

profiling.log 应该用单倍行距的字体查看,以获得最佳的可读性。