订阅莫名变少的奇怪现象

现象

个别机器上,程序一切正常、不崩溃、日志也无异常,但 EventBus 的 subscribers_ 里键会无端变少(连启动期注册的 ONLINE 都没了)。后果是某个事件悄悄不响应了。

怀疑是堆覆盖 ------ 方向是对的。

排查

先 grep 修改点:EventBus::Unsubscribe 全工程没有调用点,subscribers_ 只会在 Subscribe() 里增加。所以不是"被删了",而是内存被写坏。

再做二分注释:把 GetCard(0, m_cardInfo); 注释掉,正常打开后 subscribers_ 依然无端变少,说明两者并无直接关系。

根因

应用和库之间的 ABI 不一致。

  • 两个 cpp 引用了不同目录下的同名头文件;
  • 两个头文件里的结构体类型不一致;
  • GetCard 在拷贝时多拷贝了数据。

由此产生的连锁反应:

复制代码
越界 16 字节 → 写坏相邻 chunk 的 size 记账
            → 之后某次 malloc 按错误 size 切分
            → 那块内存被随手写,map 节点烂掉
            → find() 找不到键 = "订阅变少"
相关推荐
li星野4 小时前
相位补偿学习记录:把被颅骨“打乱“的声波重新对齐
学习
Z21-X5 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
red_redemption5 小时前
自由学习记录(230)
学习
晓梦林10 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
Godspeed Zhao19 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
David猪大卫1 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger1 天前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.1 天前
CTF2MISC中等部分
开发语言·前端·学习
YueTann1 天前
mgtv5th-baseline学习
学习
蒸蒸yyyyzwd1 天前
从后端面经学到的 3 个知识
笔记·学习