排除故障是mod开发中重要的一部分,包括对崩溃、bug和其他问题的排除。
概述
有两种错误——致命性错误与非致命性的。
致命性错误发生于游戏无法加载一个关键数据,并且在缺乏此数据时就无法运行的情况下。这会导致闪退(Crash To Desktop)。当致命性错误发生时,文件exceptions.log将会增添一行记录. 通常它们会发生于游戏加载过程中,或者进行某项特定操作时。
非致命性错误发生于游戏在运行时遭遇到了无效数据或者错误的语法。这些错误被记录于error.log。
测试
在Debug流程中可以使用如下的控制台代码:event
、observe
和run
。
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来实现。这需要对每个文件如何一起工作有很好的了解,以便你可以安全地隔离文件和文件夹,而使依赖关系损坏。
通常情况下,你可以很容易地隔离 events, decisions , missions 及 interface 文件夹,而不用太担心。然后在 common 文件夹中,逐一删除文件或文件夹,每次都重新启动游戏,以确定哪个文件或文件夹导致问题。如果没有,那么很可能问题出在 history 或 map 文件夹中。在整个过程中重复这个操作即可。
崩溃
如果没有丰富的修改知识,大多数导致崩溃回桌面的致命错误是很难调试的。下面的列表是已知的崩溃,以帮助修改者调试:
Crash | Fix |
---|---|
在 "读取数据库" (Loading Database) 期间 | 如果你使用的是 defines.lua ,检查你是否包含了原版文件包含的所有条目。
检查是否有对不存在的文件的引用。
|
在 "初始化地图逻辑" (Initializing Maplogic) 期间 | 检查gamelogic地图图像是否已经以正确的格式保存。确保使用的地图文件遵循地图修改中列出的规则。
|
在 "载入历史文件" (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 文件夹中。
历史文件:
|
点击一个省份 | * 确保该省属于 continent.txt 中的一个大陆。
|
使用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
应该用单倍行距的字体查看,以获得最佳的可读性。
文档 | 效果指令 • 触发条件 • 修正 • 作用域 • 变量 • 本地化 • 可定制的本地化 |
脚本 | 顾问 • 时代 • 书签 • 建筑 • 宣战理由 • 殖民区域 • 新建国家 • 文化 • 决议 • 定义 • 外交行动 • 灾难 • 阶层• 事件 • 派系 • 政府 • 政府互动(1.35) • 伟大工程 • 历史 • 理念组 • 思潮 • 任务树 • 修正 • 自定义国家 • 政策 • 宗教 • 叛军 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位 • 旗舰 |
地图 | 地图 • 随机新世界 • 贸易节点 |
图形 | 3D模型 • 界面 • 贴图库 • 字体 • 粒子特效 • 着色器 • 兵模 |
音频 | 音乐 • 音效 |
其它 | 控制台指令 • 校验码 • JoroDox模组制作工具 • Mod文件结构 • Mod错误调试 • 验证器 • 运行文件 |
教程 | 添加省份 • 成就修改 • On actions • 模组制作 |