Files
StellarX-kaifa/开发记录/Fix/Fix-BUG-20260409-0002-基础控件生命周期与边界条件问题.md
T

2.8 KiB
Raw Blame History

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.cpp
    • Window.h / Window.cpp
    • Button.h / Button.cpp
    • Table.h / Table.cpp
    • Label.cpp
    • MessageBox.cpp
    • TextBox.cpp
  • 影响的 API / 行为:
    • Button 回调 setter 语义收正常
    • MessageBox 不再依赖外层强制初始化 Dialog
  • 关键约束 / 不变量:
    • 宿主图形上下文必须在控件销毁后再关闭
    • 表格行数据必须与表头列数对齐

影响评估

  • 影响范围:
    • 基础控件稳定性与维护性
  • 兼容性影响:低
  • 行为变化:有(边界输入会被规范化,不再放任异常状态继续传播)
  • 性能影响:无明显负担
  • 回归风险:
    • 主要集中在表格布局与分页按钮链路

验证结果

  • 验证步骤:
  1. 编译 Window / Control / Table / Label / MessageBox / TextBox 相关文件。
  2. 逻辑推演空表头、长行数据、动态文本变化和窗口关闭链路。
  3. 在现有测试用例中回归表格和消息框基本功能。
  • 验证结果:
    • 已消除确定性越界和明显生命周期风险。
  • 回归检查:
    • 字符集相关问题暂不在本次修复范围内。
  • 验证证据:
    • 静态审查 + 编译通过

落地信息

  • Commit:
    • dde570a 之后的早期工作区修改
    • 4a6e153
    • 7f8431a
  • PR[可选]
  • 发布版本:[可选]
  • 备注:这部分修复多为基础治理,部分早期修改发生在仓库初始化之前