用途
Skyrim 崩溃诊断用于排查《上古卷轴5:天际》在启动、加载、存档或运行阶段的崩溃问题。它面向需要从崩溃日志、近期变更、插件列表、DLL 清单和可复现证据中定位原因的模组环境。
最小证据要求
诊断前需要准备以下材料:
- 完整崩溃日志,而非截图片段。
- 确切的游戏运行时和崩溃记录器。
- plugins.txt、loadorder.txt 以及模组管理器列表。
- 带版本的 SKSE DLL 清单。
- 近期新增、移除、更新、生成输出和行为运行记录。
- 复现点与复现频率。
方法
- 识别日志格式与崩溃阶段。
- 分离异常、出错指令、寄存器、调用栈、可能对象、已加载模块和插件列表。
- 在得到佐证之前,将日志中出现的具名 DLL 视为调用栈参与者,而非直接归因对象。
- 将日志与近期变更和版本兼容性进行关联。
- 检查缺失主文件、不兼容的运行时 DLL、过期的行为输出、坏资源、无效 FormID 以及存档特定状态。
- 生成带排序的假设列表,并为每个假设列出支持与反对的证据。
- 推荐最小可逆的隔离测试。
- 确认元凶后,将修复路由到对应的专门处理流程。
应避免的做法
- 仅因 Precision.dll、hdtSMP64.dll 或其他常见模块出现在日志顶部就判定其有罪。
- 在测试近期变更边界之前就要求大规模禁用模组。
- 在诊断过程中编辑正在使用的模组列表。
- 仅凭一份含糊日志就宣称确定结论。
证据标准
对于版本敏感的事实,按以下层级取证:
- 当前项目的 ENVIRONMENT.md、TASK.md、已安装框架版本和构建文件。
- 该确切版本的官方上游文档或源码。
- 用户已安装模组库中的已知良好文件,只读方式。
- 直接检查相关的 ESM、ESP、DLL、脚本、日志或归档。
不得用记忆、旧示例或看似合理的 token 替代。需在 VALIDATION.md 中记录证据路径或 URL。
证据驱动的环境控制
诊断前,将当前已安装构建与每个工作区/归档进行对比。使用确切部署的依赖布局复现,而非同目录测试架。当单元格/世界切换、对话、随从、动画模组、外观框架及其他竞争系统共享生命周期或角色状态时,需将其纳入考虑。在证明作用域、生命周期和近期变更时间线之前,不要归咎于具名 DLL。
非崩溃的运行时中止
部分 SKSE 日志会报告某个功能拒绝安装钩子。应将其视为功能级失败,而非自动视为游戏崩溃或整个插件失败。
对于 RVA 位于 .text 之外、vtable 不匹配或类似消息:
- 确认插件是否有意失败关闭;
- 记录哪个功能处于非活动状态;
- 验证运行时、Address Library/CommonLib 修订版本、重定位或 vtable 索引;
- 将候选指针映射到其实际模块;
- 检查目标字节和节区权限;
- 一次只测试一个设置开关;
- 在没有归属证据的情况下,不要推断另一个列出的战斗 DLL 应负责。
将实现修复路由到 skyrim-skse-commonlib,将日志解释路由到 skyrim-runtime-log-forensics。