LeviOptimize icon indicating copy to clipboard operation
LeviOptimize copied to clipboard

[Bug]: 崩服

Open zmsgsb opened this issue 7 months ago • 6 comments

Describe the bug

crash.zip

这两次崩服都有关LeviOptimize和LeviTPSystem,不清楚是LeviOptimize本身造成的崩溃还是LeviOptimize和LeviTPSystem有冲突?

To Reproduce

暂时不知道怎么复现的,醒来就发现崩服了两次

Expected behavior

不崩服

Screenshots

No response

Platform

win10

BDS Version

1.21.50

LeviLamina Version

1.0.1

Version

0.4.0

Additional context

1

zmsgsb avatar Apr 28 '25 05:04 zmsgsb

Image

Image

zmsgsb avatar Apr 28 '25 05:04 zmsgsb

deep seek的回复: 从提供的崩溃日志来看,崩溃发生在 LeviOptimize.dll 的哈希表查找操作中,可能与玩家对象(Player*)的无效访问有关。以下是关键分析:

崩溃原因推测 悬垂指针或空指针访问 堆栈显示崩溃发生在 phmap::priv::raw_hash_set(一个哈希表容器)的 find 函数中,用于通过玩家名称(std::string)查找 Player*。

可能触发了以下问题: 玩家对象已被销毁(如玩家退出游戏),但哈希表中仍保留其指针(悬垂指针)。 并发访问冲突(如多线程操作哈希表未加锁)。 哈希表键值异常(如字符串损坏或空字符串)。 崩溃触发路径 调用链如下:

TpaRequest::_deny (拒绝传送请求) → sendText (向玩家发送消息) → LevelQueryPlayer2::detour (查询玩家对象) → phmap 哈希表查找崩溃 可能是玩家在提交表单(如拒绝传送请求)后,服务器尝试通过名称查找玩家对象,但此时玩家已离线或对象被释放。

关键代码位置 LeviOptimize.dll phmap.h:1776 的哈希表查找逻辑(可能涉及 Player* 生命周期管理问题)。 PlayerLookupOpt.cpp:71 LevelQueryPlayer2::detour 中调用哈希表查询的代码。 TpaRequest.cc:105 拒绝传送请求时调用了 sendText,可能传递了无效的玩家对象。 修复建议 验证玩家对象有效性 在 LevelQueryPlayer2::detour 中增加指针有效性检查:

if (player && player->isValid()) { // 操作 Player* } 使用弱引用或智能指针 将 Player* 替换为 std::weak_ptr<Player> 或引用计数机制,避免悬垂指针。

同步玩家对象生命周期 确保玩家退出时从哈希表中移除对应条目(监听玩家退出事件并清理数据)。

检查第三方模组兼容性 LeviOptimize.dll 和 LeviTPSystem.dll 可能存在兼容性问题,建议更新到最新版本或联系开发者提供日志。

调试信息增强 在崩溃位置打印更多上下文信息(如玩家名称、哈希表状态),帮助定位具体触发条件。

总结 崩溃极可能是由于 已销毁的 Player* 被访问 导致。建议优先检查玩家对象生命周期管理逻辑,确保哈希表数据与玩家在线状态同步。如果是第三方模组问题,需开发者进一步修复。

zmsgsb avatar Apr 28 '25 05:04 zmsgsb

这个查询玩家的优化在高版本已删除,检查一下更新到最新版后是否仍能复现

Dofes avatar May 03 '25 21:05 Dofes

这个查询玩家的优化在高版本已删除,检查一下更新到最新版后是否仍能复现

我BDS还在1.21.50,所以暂时没法升级最新版,但是我已经把那个配置文件开关关了,有时还会崩服

zmsgsb avatar May 04 '25 06:05 zmsgsb

这个查询玩家的优化在高版本已删除,检查一下更新到最新版后是否仍能复现

Image

BDS 1.21.60 LL 1.1.1 LO 0.5.1

这是配置文件:

Image

升级后依然崩服,看样子是 optSeenPercent 造成的崩服

zmsgsb avatar May 05 '25 05:05 zmsgsb

LeviOptimize v0.5.1 BDS 1.21.60 LL 1.1.1 依然崩服,

Image

zmsgsb avatar May 17 '25 05:05 zmsgsb