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

72 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BUG-20260409-0002
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
## 基本信息
- ID: BUG-20260409-0002
- 标题: 基础控件生命周期与边界条件问题
- 状态:已修复 / 待持续回归
- 严重性:S2
- 优先级:P1
- 模块:Control / Window / Table / Label / Button / TextBox / MessageBox
- 版本 / 分支:`master`
- 环境:Windows + EasyX + VS2022
- 发现人:静态审查
- 关联 Fix IDFix-BUG-20260409-0002
## 问题描述
- 现象:
- `Window` 析构时可能先关闭图形环境,再让控件析构访问绘图接口。
- `Table` 在空表头、空数据、列数不一致时存在越界或空状态问题。
- `Label::setText()` 后尺寸与背景快照不能及时同步。
- `MessageBox` 外层曾直接干预 `Dialog` 初始化流程。
- 一些资源所有权和析构职责不够清晰。
- 影响范围:
- 基础稳定性
- 边界输入正确性
- 维护成本
- 期望结果:
- 生命周期安全、边界输入可防御、接口语义清晰
- 实际结果:
- 存在潜在崩溃、越界、状态不一致和维护负担
## 复现信息
- 前置条件:特定表格输入、动态修改文本、窗口关闭、MessageBox 使用链
- 复现步骤:
1. 静态审查相关代码路径。
2. 构造空表头、长于表头的数据行、动态变更 Label 文本。
3. 观察关闭窗口或销毁相关对象时的析构顺序。
- 复现概率:高概率 / 必现(不同问题不同)
- 最小复现 Demo[可选]
- 证据:静态分析、日志、编译验证
## 初步分析
- 疑似位置:
- `Window::~Window`
- `Control` 析构与背景快照恢复链
- `Table::initTextWaH / setData / drawHeader / drawTable`
- `Label::setText`
- `MessageBox::showAsync / showModal`
- 触发条件:
- 边界数据输入
- 动态文本变化
- 对象销毁 / 窗口关闭
- 相关线索:
- 所有权层次混乱
- 空状态防御不足
- 接口暴露超出真实职责
## 跟踪信息
- 首次发现时间:本轮协作初期
- 最后更新时间:2026-04-09
- 修复版本:[当前工作区]
- 验证版本:[当前工作区]
- 备注:字符集相关问题暂未处理,仍按 MBCS 假设工作