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

2.2 KiB
Raw Blame History

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 假设工作