故障排除:修订间差异

本页面所适用的版本可能已经过时,最后更新于2.7
无编辑摘要
无编辑摘要
 
(未显示4个用户的12个中间版本)
第1行: 第1行:
{{version|2.7}}[[File:CTD.jpg|frame|right|The CTD... Don't expect Windows to find any solution for you, you'll have to dig !]]
{{version|2.7}}[[File:CTD.jpg|frame|right| 崩溃......不要指望Windows会为你找到任何解决方案,你必须自己行动!]]


'''故障排除'''是指定位游戏崩溃、漏洞或其他问题。一些调试功能在出售给玩家的版本中并不可用,但余下的功能依然足以解决问题。
'''故障排除'''是指定位游戏崩溃、漏洞或其他问题。一些调试功能在出售给玩家的版本中并不可用,但余下的功能依然足以解决问题。
第67行: 第67行:
==载入==
==载入==


When launching the game the following steps occur:
游戏的加载按照以下顺序:
*Initialising Map Logic
* 载入地图
*Loading Databases
* 载入数据库
*Generating Coat of Arms
* 载入盾徽
*Loading Events
* 载入事件
*Loading Sounds
* 加载音效
*(Loading of vanilla history files occurs here (even if is replace_path), though it'll still show as "Loading Sounds") - very slow step !
* 载入原版历史(即使被MOD覆盖),依旧显示为加载音效(非常耗时的一步)
*Processing Flags - generates the flag sprites in gfx\flags from the individual .tga files
* 处理旗帜——从每个tga文件中获得旗帜数据
*Loading Flags
* 加载旗帜
*Loading Graphics
* 加载图像
*Creating Provinces
* 创建省份
*Loading Map(Creating Terrain)
* 载入地图(创建地形)
*Loading Map(Creating Borders)
* 载入地图(创建边境)
*Loading Map(Creating Trees)
* 载入地图(创建树木)
*Loading Map(Creating Textures)
* 载入地图(创建纹理)


Once this is done the lobby interface will be rendered.
全部完成以后显示主菜单


==崩溃==
==崩溃==


Crashes or Crash To Desktop (CTD) are the despair of the players and nightmare of the modders. There is usually little to no information to identify the cause.
崩溃,或者说弹出至桌面(CTD),令玩家苦恼,也是MOD作者的梦魇。崩溃的原因很难定位。


Here is a list of known issues:
这里是一些已知的崩溃原因


{| class="wikitable"
{| class="wikitable"
|-
|-
! Symptom !! Troubleshooting
! 现象 !! 故障排除方法
|-
|-
| Instant CTD clicking Play in the launcher
| 在启动器点击开始时崩溃
| Check no new defines.lua entries are missing in the mod (or better use [[defines]] folder to override, and avoid duplication)
| 检查mod的defines.lua 中有无缺少条目(或者使用[[ 定义|defines]] 文件夹来覆盖,并避免重复)
|-
|-
| CTD at "Loading Databases"
| 在载入数据库时崩溃
*Compare setup.log with the mod and with raw vanilla : next steps normally logged in vanilla are the likely cause of the crash
*Compare setup.log with the mod and with raw vanilla : next steps normally logged in vanilla are the likely cause of the crash
*Check the format and color indexes of [[Map modding|map files]] (terrain.bmp, ...)
*Check the format and color indexes of [[Map modding|map files]] (terrain.bmp, ...)
*Check Province Map for any Antialiazing pixels
|-
|-
| CTD at "Loading Events"
| 在载入事件时崩溃
* Check for unbalanced quotes, such as ''has_dlc = "Reapers''
* Check for unbalanced quotes, such as ''has_dlc = "Reapers''
* Can be caused by excessively long log commands with multiple references to global variables.
* Can be caused by excessively long log commands with multiple references to global variables.
|-
|CTD at "Loading Graphics
|Ensure that your "positions.txt" is not misnamed and that it is empty.
|-
|-
| CTD when rendering the lobby interface
| CTD when rendering the lobby interface
第118行: 第122行:
*Check that no character has a death date past the end date of the mod.
*Check that no character has a death date past the end date of the mod.
*Check that no character has a birth date later than death date.<ref>In 2.6.3 game is fully playable and crashes only if you load saved game or resign the game</ref>
*Check that no character has a birth date later than death date.<ref>In 2.6.3 game is fully playable and crashes only if you load saved game or resign the game</ref>
|-
| CTD after 1 in-game day
|
* Check loaded trade routes reference valid provinces. For total conversion mods, use <code>replace_path = "common/trade_routes"</code> or blank vanilla files.
|-
| CTD after a random elapsed time
|
It is the worst kind of CTD, because it can be caused by ANY event or decision occurring in the game.
*If it slows down before crashing, it might be an infinite loop in an event. Check for a stackoverflow error being reported in exceptions.log. See [[Event modding#Recursive events]]
*If it crashes without warning, it may be a [[scripting]] error regarding parameter types that is not safely handled by the engine. Use [[The Validator]] and fix the errors reported, in priority effects used in a wrong context or with wrong parameters. For instance <code>set_graphical_culture = norse</code> vs <code>set_graphical_culture = norsegfx</code> used to CTD.
|-
|-
| CTD when hovering or clicking an event option
| CTD when hovering or clicking an event option
第130行: 第144行:
| CTD when starting typing specific letters in the Title finder
| CTD when starting typing specific letters in the Title finder
| Check that there are no empty geographical regions (at least 1 valid province)
| Check that there are no empty geographical regions (at least 1 valid province)
|-
| CTD when you click the "Arrange Marriage" rings button next to a character's portrait
| Check that no character, living or dead, that is conceived illegitimately is missing the required "[[Bastard]]" Trait. The Trait must be placed in each character's Character History entry BEFORE their birth date and WITHOUT being enclosed in brackets.
|-
| Crash when you click a baron holding in a province to open building interface
| Check that there's no illegal buildings in that holding, e.g ca_con_wall_6(Theodosian Walls) in a city.
|-
|-
|}
|}


===  调试 ===
===  排除错误 ===
==== Windows ====


In last resort you can use '''Visual Studio''' (including the free [http://www.visualstudio.com/products/visual-studio-express-vs Express editions]; get the "Windows Desktop" one) to see detailed debugging information. Though it won't let you debug step by step, as the sources for the game are not available.
In last resort you can use '''Visual Studio''' (including the free [http://www.visualstudio.com/products/visual-studio-express-vs Express editions]; get the "Windows Desktop" one) to see detailed debugging information. Though it won't let you debug step by step, as the sources for the game are not available.
第142行: 第163行:


When the game crashes Visual Studio will freeze it, tell you where the offset at which crash happened, and provide the option to save a "minidump". The offset and dump won't mean much to you but if you want to report the crash to Paradox they would find both useful.
When the game crashes Visual Studio will freeze it, tell you where the offset at which crash happened, and provide the option to save a "minidump". The offset and dump won't mean much to you but if you want to report the crash to Paradox they would find both useful.
==== macOS ====
Install Xcode from the App Store, then run <code>xcode-select --install</code> in a Terminal window.
Launch the game from lldb:
<pre>
cd ~/Library/Application\ Support/Steam/SteamApps/common/Crusader\ Kings\ II
lldb ck2.app/Contents/MacOS/ck2
r -- -debug -debugscripts
</pre>
If the game crashes, it will be paused in the debugger, letting you use the <code>bt</code> command to get a [https://en.wikipedia.org/wiki/Stack_trace stack trace]. Most other debugger features are unavailable without source code.
Meanwhile, use [https://en.wikipedia.org/wiki/Tail_(Unix) tail] in separate terminal tabs to monitor the game's own logs:
<pre>
tail -F ~/Documents/Paradox\ Interactive/Crusader\ Kings\ II/logs/game.log
tail -F ~/Documents/Paradox\ Interactive/Crusader\ Kings\ II/logs/error.log
</pre>


==漏洞==
==漏洞==


Bugs are usually easier to identify than crashes, as there is in-game context to identify the cause.
由于你可以在漏洞发生后继续看到游戏内文本,漏洞通常比崩溃容易定位。
Most non-functional bugs can be spotted via [[The Validator]], a third-party tool which checks script files for various kinds of problems.
大多数不影响功能的漏洞可以通过[[ 验证器]] ,一个第三方的用于检测脚本文件的工具来确定。


{| class="wikitable"
{| class="wikitable"
|-
|-
! Symptom !! Troubleshooting
! 现象 !! 故障排除方法
|-
|-
| Blank event popups that pause the game and can't be closed.
| 空白的事件弹出窗口,强制暂停游戏且无法被关闭
*Save the game after the popups have appeared (without checking the compress save checkbox), and look in the save for the faulty eventID that is the source. They will be at the bottom of the file, in a <code>player_event</code> section.
* 窗口弹出后保存游戏(无需检查压缩存档选框),然后在存档中查找错误事件的ID。它们会出现在文件的最后,<code>player_event</code> 一节
*Use [[The Validator]], check for Parse failures, or invalid node type errors.
*Use [[The Validator]], check for Parse failures, or invalid node type errors.
|-
|-
第210行: 第250行:
*Check that no province history files reference a barony that is not defined in landed_titles (with [[The Validator]])
*Check that no province history files reference a barony that is not defined in landed_titles (with [[The Validator]])
|-
|Rivers are flowing from east to west on the map
|
* Rivers flowing east to west typically means that there is something wrong with the color index of rivers.bmp. <ref>[https://forum.paradoxplaza.com/forum/index.php?threads/map-mod-testing.588084/page-96]</ref>
|-
|-
| Title is badly displayed on the map (not visible or way outside its area)
| Title is badly displayed on the map (not visible or way outside its area)
第237行: 第281行:
==测试==
==测试==


Testing is the process of checking your mod for bugs, including crashes, broken functionalities, or gameplay/balance issues.
包括检测你的MOD是否会导致崩溃、有无漏洞、无效功能或者游戏体验/ 平衡性问题。
 
测试工具包括:
Tooling for testing include:
*[[ 控制台指令]] ,提供许多用于调试的功能(或者作弊功能... , 包括
*[[Console commands|In-game console]], with various debugging (or cheating...) features, in particular <code>play</code>, <code>testevent</code> and <code>event</code> commands. Note that the "debug_" console commands are currently disabled in retail builds.
**<code>play</code> ,控制特定角色
*Cheat mods, allowing to automate many console commands, or things not achievable or too complex via console commands.
**<code>testevent</code>
*Observer mode (<code>observe</code> console command), to check for game balance, and detect random CTDs over hundred of in-game years.
**<code>event</code> 。注意部分以debug_开头的命令在上市版本中不可用。
** <code>run</code>,测试你的环境和指令,而且不用重新开始游戏。
* 观察者模式(控制台指令<code>observe</code> ),测试游戏平衡和在长期游戏中检测随机崩溃。


==References==
== 参考资料==
<references/>
<references/>


{{ModdingNavbox}}
{{ModdingNavbox}}
[[Category:Modding]]
[[Category: 模组制作]]
[[en:Troubleshooting]]

2022年5月4日 (三) 15:28的最新版本

崩溃......不要指望Windows会为你找到任何解决方案,你必须自己行动!

故障排除是指定位游戏崩溃、漏洞或其他问题。一些调试功能在出售给玩家的版本中并不可用,但余下的功能依然足以解决问题。

日志文件

王国风云2本身在你的游戏文件夹(~\Documents\Paradox Interactive\Crusader Kings II\logs\)记录了大量的日志文件。每次游戏启动时这些文件将被覆盖。

更多的日志记录功能可以用启动参数来打开(通过steam高级启动/定义启动参数): -debug -debugscripts

文件名 描述
game.log 游戏内通知和log指令的输出。从patch 2.4.1开始,只在-debugscripts启用时记录
setup.log 游戏数据loading日志(GUI、特质、修正等)
error.log 分析和记载错误。启用-debugscripts时记载更多内容。

如果没有发现问题,以下几行应该显示为OK:

[technology.cpp:718]: Missing Tech seed values:
[technology.cpp:755]: None.
[texturehandler.cpp:181]: Couldn't find texture file: .
historical_setup_errors.log 额外的关于头衔/角色历史的错误。只在-fullhistoricalsetuplog启用时记录。
system_interface.log 关于interface modding的错误
graphics.log 关于map modding的错误
system.log 硬件内容记录
system_interface.log 界面错误
text.log 关于localization键值的错误记录
script_optimizations.log 关于廷臣触发的事件的错误记录
ai.log
exceptions.log 如果游戏崩溃,你可能在此得到一份堆栈轨迹,和最后一个被调用的方法(例如:CLandedTitle::GetShortName)
time.log 记载游戏载入时间
memory.log 记载游戏占用内存

载入

游戏的加载按照以下顺序:

  • 载入地图
  • 载入数据库
  • 载入盾徽
  • 载入事件
  • 加载音效
  • 载入原版历史(即使被MOD覆盖),依旧显示为加载音效(非常耗时的一步)
  • 处理旗帜——从每个tga文件中获得旗帜数据
  • 加载旗帜
  • 加载图像
  • 创建省份
  • 载入地图(创建地形)
  • 载入地图(创建边境)
  • 载入地图(创建树木)
  • 载入地图(创建纹理)

全部完成以后显示主菜单

崩溃

崩溃,或者说弹出至桌面(CTD),令玩家苦恼,也是MOD作者的梦魇。崩溃的原因很难定位。

这里是一些已知的崩溃原因

现象 故障排除方法
在启动器点击开始时崩溃 检查mod的defines.lua中有无缺少条目(或者使用defines文件夹来覆盖,并避免重复)
在载入数据库时崩溃
  • Compare setup.log with the mod and with raw vanilla : next steps normally logged in vanilla are the likely cause of the crash
  • Check the format and color indexes of map files (terrain.bmp, ...)
  • Check Province Map for any Antialiazing pixels
在载入事件时崩溃
  • Check for unbalanced quotes, such as has_dlc = "Reapers
  • Can be caused by excessively long log commands with multiple references to global variables.
CTD at "Loading Graphics Ensure that your "positions.txt" is not misnamed and that it is empty.
CTD when rendering the lobby interface Check that interface .gui and .gfx files are properly merged with vanilla, if copied in the mod.
CTD on applying history (initial load or selecting a bookmark) Check that all groups in technology history have an entry for earliest starting date of the mod. See technology modding.
CTD on load/resign
  • Check that no character has a death date past the end date of the mod.
  • Check that no character has a birth date later than death date.[1]
CTD after 1 in-game day
  • Check loaded trade routes reference valid provinces. For total conversion mods, use replace_path = "common/trade_routes" or blank vanilla files.
CTD after a random elapsed time

It is the worst kind of CTD, because it can be caused by ANY event or decision occurring in the game.

  • If it slows down before crashing, it might be an infinite loop in an event. Check for a stackoverflow error being reported in exceptions.log. See Event modding#Recursive events
  • If it crashes without warning, it may be a scripting error regarding parameter types that is not safely handled by the engine. Use The Validator and fix the errors reported, in priority effects used in a wrong context or with wrong parameters. For instance set_graphical_culture = norse vs set_graphical_culture = norsegfx used to CTD.
CTD when hovering or clicking an event option Invalid syntax in the event, or calling a command with an invalid value.
CTD when clicking on religion screen Check that no more than 5 holy sites are defined in landed_titles for that religion
CTD when clicking on button to open College of Cardinals See Interface modding#Papal succession
CTD when starting typing specific letters in the Title finder Check that there are no empty geographical regions (at least 1 valid province)
CTD when you click the "Arrange Marriage" rings button next to a character's portrait Check that no character, living or dead, that is conceived illegitimately is missing the required "Bastard" Trait. The Trait must be placed in each character's Character History entry BEFORE their birth date and WITHOUT being enclosed in brackets.
Crash when you click a baron holding in a province to open building interface Check that there's no illegal buildings in that holding, e.g ca_con_wall_6(Theodosian Walls) in a city.

排除错误

Windows

In last resort you can use Visual Studio (including the free Express editions; get the "Windows Desktop" one) to see detailed debugging information. Though it won't let you debug step by step, as the sources for the game are not available.

Simply start the game, then use the Debug > Attach to process... menu option. Use the Output window to read the game's messages, which will include script validation errors and performance data.

For best results create an empty project and configure it to launch CK2.exe with your mod active (i.e. with the argument -mod=mod/foo.mod); check the documentation for details on how to do this. You will then be able to launch the game with debugging by clicking the green Play button in Visual Studio. This will ensure that you capture any problems that show up right after the game starts.

When the game crashes Visual Studio will freeze it, tell you where the offset at which crash happened, and provide the option to save a "minidump". The offset and dump won't mean much to you but if you want to report the crash to Paradox they would find both useful.

macOS

Install Xcode from the App Store, then run xcode-select --install in a Terminal window.

Launch the game from lldb:

cd ~/Library/Application\ Support/Steam/SteamApps/common/Crusader\ Kings\ II
lldb ck2.app/Contents/MacOS/ck2
r -- -debug -debugscripts

If the game crashes, it will be paused in the debugger, letting you use the bt command to get a stack trace. Most other debugger features are unavailable without source code.

Meanwhile, use tail in separate terminal tabs to monitor the game's own logs:

tail -F ~/Documents/Paradox\ Interactive/Crusader\ Kings\ II/logs/game.log
tail -F ~/Documents/Paradox\ Interactive/Crusader\ Kings\ II/logs/error.log

漏洞

由于你可以在漏洞发生后继续看到游戏内文本,漏洞通常比崩溃容易定位。 大多数不影响功能的漏洞可以通过验证器,一个第三方的用于检测脚本文件的工具来确定。

现象 故障排除方法
空白的事件弹出窗口,强制暂停游戏且无法被关闭
  • 窗口弹出后保存游戏(无需检查压缩存档选框),然后在存档中查找错误事件的ID。它们会出现在文件的最后,player_event一节
  • Use The Validator, check for Parse failures, or invalid node type errors.
Scripting keywords appearing in decisions/councillor names
Decision not appearing
  • Move conditions from potential to allow block, to see failing conditions in tooltip.
Decision not having any effect when taken
Truncated localization
  • Open .csv file with OpenOffice and check for extra columns containing text
  • Make sure translations do not contain semi-colon character, as it used separate languages
Localization not appearing in game
  • Ensure file extension is .csv, not .txt
  • Check that mod folder is named localisation, not localization.
  • Ensure overridden vanilla keys are loaded before vanilla (i.e. 00_ file prefix)
Localized names show strange characters (Ã)
  • Check encoding of landed_titles, culture, and localization files to be Windows 1252 (ANSI), and not any type of Unicode.
Events not triggering (but OK via console testevent)
  • Check for invisible non-breakable spaces in event files (they can be found with Notepad++ by searching with "Extended mode" the Unicode string \u00A0)
Titles have wrong flags
  • Clean the flag cache in ~\Documents\Paradox Interactive\Crusader Kings II\(Mod user_dir)\gfx\flags
  • Make sure all titles above barony have a corresponding flag in gfx/flags (with The Validator)
  • Try to see at which title it starts messing up, that's usually where you're missing the flag.
Black coats of arms
  • Verify the pattern file size in Coats of arms.txt
  • Ensure all religion match a CoA group
Missing layers in portraits for custom ethnicities
Casus Belli immediately ends inconclusively
  • Make sure can_use/can_use_title/is_valid_title blocks are in synch.
All units models use wrong gfx
  • Check that no province history files reference a barony that is not defined in landed_titles (with The Validator)
Rivers are flowing from east to west on the map
  • Rivers flowing east to west typically means that there is something wrong with the color index of rivers.bmp. [2]
Title is badly displayed on the map (not visible or way outside its area)
  • Check for stray pixels in provinces.bmp
Popups like naming children not showing up
  • When using replace_path = "events", the following script needs to be added in the mod events folder:
# ID 1 and 2 are empty dummy events that are used by the message system to spawn messages
# that should be displayed as events, their descriptions are filled in by the message system
letter_event = {
	id = 1
	is_triggered_only = yes
	desc = "A"
}
character_event = {
	id = 2
	is_triggered_only = yes
	desc = "B"
}

测试

包括检测你的MOD是否会导致崩溃、有无漏洞、无效功能或者游戏体验/平衡性问题。 测试工具包括:

  • 控制台指令,提供许多用于调试的功能(或者作弊功能...),包括
    • play,控制特定角色
    • testevent
    • event。注意部分以debug_开头的命令在上市版本中不可用。
    • run,测试你的环境和指令,而且不用重新开始游戏。
  • 观察者模式(控制台指令observe),测试游戏平衡和在长期游戏中检测随机崩溃。

参考资料

  1. In 2.6.3 game is fully playable and crashes only if you load saved game or resign the game
  2. [1]