Files
StellarX-kaifa/开发记录/BUG/BUG-20251220-0001-TabControl-setActiveIndex绘制前调用崩溃.md
T

61 lines
2.0 KiB
Markdown
Raw 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-20251220-0001
> 适用场景:记录问题本身,不展开完整修复方案。修复内容写入对应的 Fix 文档。
## 基本信息
- ID: BUG-20251220-0001
- 标题: TabControl::setActiveIndex 绘制前调用崩溃
- 状态:已修复
- 严重性:S1
- 优先级:P0
- 模块: TabControl
- 版本 / 分支: v2.3.1
- 环境: Visual Studio / Debug / Release
- 发现人: 用户
- 关联 Fix ID: Fix-BUG-20251220-0001
## 问题描述
- 现象: 在 TabControl 首次绘制前或进入主事件循环前调用 `setActiveIndex()`,会触发空指针访问并导致程序崩溃。
- 影响范围: 影响默认激活页设置流程,启动阶段即可崩溃,严重影响使用。
- 期望结果: `setActiveIndex()` 可在绘制前记录默认激活页,并在 TabControl 第一次绘制时完成默认激活。
- 实际结果: 绘制前调用会直接崩溃,无法设置默认激活页。
## 复现信息
- 前置条件:[可选] TabControl 尚未绘制。
- 复现步骤:
1. 创建 TabControl 对象。
2. 在首次绘制前调用 `setActiveIndex(0)`。
3. 运行程序并观察崩溃。
- 复现概率:必现
- 最小复现 Demo:
```cpp
auto ta = std::make_unique<TabControl>(10, 10, 1100, 300);
ta->setShape(StellarX::ControlShape::B_ROUND_RECTANGLE);
ta->setActiveIndex(0);
```
- 证据:PDF 历史记录描述绘制前调用会造成空指针访问。
## 初步分析
- 疑似位置: `TabControl::setActiveIndex()`
- 触发条件: TabControl / 页签按钮尚未完成绘制和初始化时,提前执行激活页切换逻辑。
- 相关线索:
- 默认激活应属于延迟到首次绘制后的行为。
- 绘制前直接触发页签按钮点击回调,会访问尚未初始化的内部状态。
- 最近相关改动:[可选]
## 跟踪信息
- 首次发现时间: 2025-12-20
- 最后更新时间: 2026-09-19(从 PDF 整理入库)
- 修复版本: v2.3.2
- 验证版本:[可选] v2.3.2
- 备注:[可选] 来源原始 ID 为 `BUG-20251220`;PDF 未包含 `-XXXX` 后缀,入库时补充序号。