Openapoc: 没有匹配 ID“VEHICLE_794”CTD 的车辆

创建于 2017-11-23  ·  33评论  ·  资料来源: OpenApoc/OpenApoc

从 CTD 之后的日志中...

W 52740355833 bool __cdecl OpenApoc::Vehicle::popFinishedMissions(class OpenApoc::GameState &):没有下一个载具任务,闲置
E 52741482678 类 std::shared_ptr__cdecl OpenApoc::Vehicle::get(const class OpenApoc::GameState &,const class OpenApoc::UString &): 没有车辆匹配 ID "VEHICLE_794"
0x00000001402F9D30 PHYSFS_writeSLE16+0x15f400
0x000000014020208A PHYSFS_writeSLE16+0x6775a
0x00000001401FFD3A PHYSFS_writeSLE16+0x6540a
0x00000001400A784C PHYSFS_swapULE64+0x6600c
0x000000013FFA3D32 PHYSFS_swapULE64+0xffffffffffff624f2
0x000000013FF7F210 PHYSFS_swapULE64+0xfffffffffff3d9d0
0x000000014017E015 PHYSFS_swapULE64+0x13c7d5
0x0000000077A159CD BaseThreadInitThunk+0xd
0x0000000077C4A561 RtlUserThreadStart+0x21

image

image

最有用的评论

此错误将在保存中持续存在 - 因此,如果 StateRef 错误的原始原因已经发生了,你保存,它会在保存中嵌入“坏处”,所以重新加载“损坏的”保存会导致同样的错误也就不足为奇了。

当游戏尝试使用该“损坏的”对象并意识到某些错误而非错误本身时,会显示上述错误消息。 故障可能发生在前一段时间,只是损坏的对象尚未使用。

因此,如果您使用相同的保存进行测试并且自修复以来尚未创建新游戏,则它可能不会告诉我们太多。

所有33条评论

只是抬头
这个 CTD 现在已经窃听了两场比赛。
都在“简易地图”上
车辆ID均为794~
单击“跛行”将您直接返回桌面。

该回溯看起来不正确,就像它找不到调试符号一样(所以它只是使用它可以找到的最接近的符号,恰好是 physfs)。

如果您正在使用 appveyor 构建 - 您可以从顶部提取“调试”包吗? 那么 .pdb 文件与 .exe 位于同一目录中吗?

并且“尝试跛行”对于某些错误(像这样)根本不起作用,因为错误实际上是在说“我们即将崩溃,原因如下:”,因此尝试继续只会崩溃:)

作为一个长期目标,有可能在出错时转储当前的“保存”状态,它可能会为我们提供有关错误的有用信息......但这可能会陷入完全相同的问题(如果内部数据不能值得信任,我们可能会在尝试写入保存时崩溃)

@JonnyH没问题,我的目标是在周一下班后使用调试包进行测试...

目前在年轻体操运动员中我的眼球:D

多年轻? ) 希望它是合法的 XD

@makus82可悲的是,这个周末和最后一次,除了最后几个都太年轻了。 但是当我参加大学活动时总是很有趣 - 辣妹,都是合法的 💃

关于CTD,请查找日志、保存等附件。 刚开始时间,游戏就会崩溃......

我已经按照@JonnyH所说的做了,并在生成这些之前将调试安装放在了上面......

openapoc_log.txt

save_Easy 1.zip

和同一个保存文件的不同变体......

image

openapoc_log.txt

再次在 0.1-117
甚至进行全新安装(擦除除保存之外的所有现有 apoc 数据,再次从 zip 中提取)

image

我可以提供一些细节。
重现步骤:

  1. 以中等(可能是任何)难度开始游戏
  2. 出售地面(可能是任何)车辆
  3. 保存游戏
  4. 加载游戏
  5. 取消暂停游戏

@OverDrone

啊,是的,在我获得此 CTD 的所有游戏中,我都会出售我的猎狼犬 APC 和 Stormdog,以便为我从未使用过的车辆获得额外的几千现金。

当我不出售任何车辆时,我会对游戏进行测试,看看是否会发生此错误。
目前任何游戏我都卖掉了它崩溃的任何车辆......

嗯,刚刚在我没有出售地面单位的游​​戏中崩溃了......看起来非常相似......

image
image
image

同样的问题.... 我不能卖 veicle 和调试选项让我到桌面...
任何想法 x 解决?

交易画面的代码看起来一团糟。 不重构就很难解决这个问题。

仍然存在于 0.1-167 ( OpenApoc-x64-v0.1-167-gf31d8b8b ) 上,这有点烦人... 报告车辆死亡错误已排序。 想知道为什么这个错误拒绝被粉碎?

image
image
image

您是否加载了游戏或开始了新游戏?
尝试在新游戏上进行测试。

刚开始在全新安装的新游戏进行检查。 会确认是否还有问题。

好的,在我确认此问题已修复之前,游戏显然因问题 #255 而崩溃。

也就是说,我能够出售 Stormdog 和 Wolfhound APC 并且没有 794 CTD 但也没有在没有游戏中断的情况下进行到第一天的结束:(

请参阅关于 #255 的最新评论,了解导致我的新游戏结束的崩溃日志和屏幕

@redv车辆崩溃似乎已修复,但是,问题似乎也扩展到了代理,此错误仍然存​​在...

image
image

退出游戏会死机吗?

它发生在退出游戏或进入基本屏幕时(上面的情况是退出)

@redv可悲的是,我刚刚在全新、全新安装和新的 OpenApoc 游戏中再次出现 Agent 45 错误。 退出游戏时发生如下...

游戏版本是最新版本(撰写本文时为 0.1-172)

image
image
image

单击“跛行”会产生这个变体......
image
image

当应用程序销毁 GameState 类时,首先销毁代理列表,其次是基地、设施、实验室等。 Lab 类包含自己的代理列表(科学家),但代理类已经销毁。 因此,错误发生了。
PR #337 修复了这个错误。
作为可能的解决方法,在退出游戏之前将科学家从实验室中移除。

@redv
遗憾的是,在OpenApoc-debug-x64-v0.1-169-g921de2a3版本中仍然遇到了这个问题的一个变种

这一次我将特工(步行穿过人管)转移到贫民窟的外星人事件中。 我也准备突袭 CoS 神殿,错误发生在建筑物和选择的代理上。

image
image
image

请附上 CTD 前的最后一次保存。

@redv给你。 为了重复这个错误,将 Valkyrie 发送到基地东北部的 CoS 神殿,然后将两个机器人特工发送到一两分钟后出现的贫民窟事件。

当 Valkyrie 到达 CoS 神殿并且您选择其中的特工袭击建筑物时会发生错误。

save_Medium 测试 1.zip

Savegame 是今天在全新安装的 OpenApoc 上创建的新游戏。 游戏在开始的前几分钟......

当游戏尝试为战斗地图加载资源时会发生该错误。 该地图包含几个从一组中随机选择的块。 看起来其中之一会在资源加载期间导致错误。
也就是说,如果您多次重复相同的操作,迟早会成功加载 CoS 战斗地图。 该映射将没有坏块。

  1. 漏洞。 需要弄清楚为什么游戏无法加载某些地图块。

AGENT_35 是量子物理学家 Peter Jones。
当地图加载的bug发生时,崩溃时的游戏会调用析构函数。 代理的析构函数在实验室的析构函数之前运行。 实验室的析构者试图释放特工,但特工已经从记忆中消失了。 因此,第二个错误发生在包含 Lab 类中的代理的 StateRef 类中。

  1. 漏洞。 我认为 StateRef 类是一个很大的架构错误。 最好使用常规的 C 指针。 我认为“观察者”模式可以解决大多数问题。 至少我会努力找到一个好的解决方案。

谢谢 redv ; 当您知道什么解决方案可行时告诉我

至于地图,这可能与问题#284有关吗? 我注意到相当多的 CoS 地图和其他一些地图在被杀死/震惊/恐慌单位丢弃物品时似乎会产生错误。

又一次在 0.1-200 崩溃,这次是在打开代理屏幕时......已经卖掉了 Stormdog。
image
image
image

选择“跛行”执行此操作

image
image

这次的装备:(
请创建一个新问题。 因为这个问题在问题队列中太深了。

确认这仍然是一个问题,出售任何车辆都会导致在调用与其相关的任何内容时弹出此信息。

I 417929443733 void __cdecl匿名命名空间'::SDLRawBackend::setTrack(class std::shared_ptr): 设置音轨为 0,000,019,B87,324,D20
我 422315537514 void __cdecl anonymous-namespace'::SDLRawBackend::playSample(class std::shared_ptr<class OpenApoc::Sample>,float): Placed sound 0,000,019,BFD,B86,6B0 on queue I 422432359150 void __cdecl OpenApoc::VEquipScreen::setSelectedVehicle(class std::shared_ptr<class OpenApoc::Vehicle>): Selecting vehicle "Valkyrie Interceptor 90" I 422432639858 void __cdecl OpenApoc::VEquipScreen::setSelectedVehicle(class std::shared_ptr<class OpenApoc::Vehicle>): Selecting vehicle "Valkyrie Interceptor 90" I 424865493463 void __cdecl anonymous-namespace'::SDLRawBackend::playSample(class std::shared_ptr,float): 将声音 0,000,019,BFD,B86,6B0 放入队列
我 427732686087 类 std::shared_ptr__cdecl OpenApoc::Vehicle::addEquipment(class OpenApoc::GameState &,struct glm::tvec2,类 OpenApoc::StateRef):搭载通用装备“乘客舱”的“瓦尔基里拦截机90”
我 430232009610 void __cdecl anonymous-namespace'::SDLRawBackend::playSample(class std::shared_ptr<class OpenApoc::Sample>,float): Placed sound 0,000,019,BFD,B86,6B0 on queue I 432298883338 void __cdecl anonymous-namespace'::SDLRawBackend::playSample(class std::shared_ptr,float): 将声音 0,000,019,BFD,B86,6B0 放入队列
W 432416803536 无效 __cdecl OpenApoc::StateRef::resolve(void) const:AEquipmentType 对象具有无效前缀 - 应为“AEQUIPMENTTYPE_” ID“VEHICLE_794”
E 432419555645 类 std::shared_ptr__cdecl OpenApoc::AEquipmentType::get(const class OpenApoc::GameState &,const class OpenApoc::UString &):没有匹配ID“VEHICLE_794”的设备类型
0x00007FF712CA8C70 PHYSFS_writeSLE16+0x917d​​0
0x00007FF712AF1F6C PHYSFS_swapULE64+0xef91c
0x00007FF712B5D944 PHYSFS_swapULE64+0x15b2f4
0x00007FF712B5FA0A PHYSFS_swapULE64+0x15d3ba
0x00007FF712B63967 PHYSFS_swapULE64+0x161317
0x00007FF712B61F0E PHYSFS_swapULE64+0x15f8be
0x00007FF712B56B98 PHYSFS_swapULE64+0x154548
0x00007FF712A79F49 PHYSFS_swapULE64+0x778f9
0x00007FF712A233D8 PHYSFS_swapULE64+0x20d88
0x00007FF7129FF6A0 PHYSFS_swapULE64+0xffffffffffffd050
0x00007FF712BFAE25 PHYSFS_swapULE64+0x1f87d5
0x00007FFF402C3034 BaseThreadInitThunk+0x14
0x00007FFF41181431`RtlUserThreadStart+0x21`

几天的广泛游戏测试,从那以后我就没有看到这个错误
结题。

非常感谢 Jarskih、RedV 和 JonnyH

错误在 2019 年 7 月仍然活跃。恢复保存的游戏,然后继续。 立即出错。 关闭错误窗口并重复。
Image1
save_Shot down UFO.zip

此错误将在保存中持续存在 - 因此,如果 StateRef 错误的原始原因已经发生了,你保存,它会在保存中嵌入“坏处”,所以重新加载“损坏的”保存会导致同样的错误也就不足为奇了。

当游戏尝试使用该“损坏的”对象并意识到某些错误而非错误本身时,会显示上述错误消息。 故障可能发生在前一段时间,只是损坏的对象尚未使用。

因此,如果您使用相同的保存进行测试并且自修复以来尚未创建新游戏,则它可能不会告诉我们太多。

是的,前 3 次保存也出问题了。 如果有帮助,我可以回到早期的保存。

此页面是否有帮助?
0 / 5 - 0 等级