2.8 KiB
2.8 KiB
Fix-BUG-20260409-0002
适用场景:记录某个 BUG 的修复方案、影响评估、验证结果与落地信息。
关联信息
- Fix ID: Fix-BUG-20260409-0002
- 关联 BUG ID: BUG-20260409-0002
- 修复目标: 收紧资源所有权,补齐基础边界防御,修正生命周期与接口语义问题
- 状态:已完成 / 待持续回归
- 负责人:Codex 协作修改
- 分支 / 版本:
master
根因分析
- 根因:
- 部分对象持有关系不清晰,析构顺序对 EasyX 上下文敏感。
Table / Label等基础控件对空状态和动态变化处理不足。MessageBox曾通过历史接口越权干预Dialog初始化。
- 触发条件:
- 析构时机
- 空数据 / 列数不一致
- 动态变更文本
- 为什么之前没发现:
- 很多问题集中在边界输入和静态结构设计,而非主路径功能
修复方案
- 修复思路:
- 收紧资源所有权
- 明确析构顺序
- 给空状态和列数不一致加防御
- 让接口更贴合真实职责
- 关键改动:
Window析构先清空控件树,再closegraph()Control / Window / Button / Table中一批资源改为明确所有权Table增加空状态、列数规范化、分页下限保护、表高计算Label::setText()重新计算尺寸并处理旧快照MessageBox移除外层setInitialization(true)调用
- 涉及文件 / 类 / 函数:
Control.h / Control.cppWindow.h / Window.cppButton.h / Button.cppTable.h / Table.cppLabel.cppMessageBox.cppTextBox.cpp
- 影响的 API / 行为:
Button回调 setter 语义收正常MessageBox不再依赖外层强制初始化Dialog
- 关键约束 / 不变量:
- 宿主图形上下文必须在控件销毁后再关闭
- 表格行数据必须与表头列数对齐
影响评估
- 影响范围:
- 基础控件稳定性与维护性
- 兼容性影响:低
- 行为变化:有(边界输入会被规范化,不再放任异常状态继续传播)
- 性能影响:无明显负担
- 回归风险:
- 主要集中在表格布局与分页按钮链路
验证结果
- 验证步骤:
- 编译
Window / Control / Table / Label / MessageBox / TextBox相关文件。 - 逻辑推演空表头、长行数据、动态文本变化和窗口关闭链路。
- 在现有测试用例中回归表格和消息框基本功能。
- 验证结果:
- 已消除确定性越界和明显生命周期风险。
- 回归检查:
- 字符集相关问题暂不在本次修复范围内。
- 验证证据:
- 静态审查 + 编译通过
落地信息
- Commit:
dde570a之后的早期工作区修改4a6e1537f8431a
- PR:[可选]
- 发布版本:[可选]
- 备注:这部分修复多为基础治理,部分早期修改发生在仓库初始化之前