179 lines
7.5 KiB
Markdown
179 lines
7.5 KiB
Markdown
# eqpalg 重构过程状态 — 2026-05-15
|
||
|
||
## 当前状态:Phase 1-4 代码完成,编译通过,运行调测中
|
||
|
||
---
|
||
|
||
## 已完成(Phases 1-4)
|
||
|
||
### Phase 1: ExpressionEngine 统一表达式引擎 ✅
|
||
- ❌ 删除 ExpModule(250 行)
|
||
- ❌ 删除 `is_exp_alg_` 补丁标志
|
||
- ❌ 消除双 FunVars
|
||
- ✅ 创建 ExpressionEngine(347 行,`eqpalg/utility/expression_engine.*`)
|
||
- ✅ 统一变量刷新、表达式注册/求值、FunVars 管理、hold 变量
|
||
|
||
### Phase 2: FbStateMachine 反馈状态机 ✅
|
||
- ✅ 创建 FbStateMachine(348 行,`eqpalg/utility/fb_state_machine.*`)
|
||
- ✅ 7 状态显式建模:Idle → Started → InProgress → Done/NotHold/Timeout
|
||
- ✅ 变量快照/累积/清零内置于状态机
|
||
- ❌ 删除 act_start_done/not_hold/done/timeout 4 方法
|
||
- ❌ 删除 act_started_/triggered_/fb_triggered_/fb_done_ 4 标志
|
||
|
||
### Phase 3: ExpBase 解耦 + 算法子类化 ✅
|
||
- ✅ BoundChecker 提取(`eqpalg/utility/bound_checker.*`,90 行)
|
||
- ✅ StatCollector 提取(`eqpalg/utility/stat_collector.*`,206 行)
|
||
- ✅ 4 个算法子类:
|
||
- LogicAlg(Alg 1,36 行)
|
||
- BoundAlg(Alg 2,85 行)
|
||
- BoundHoldAlg(Alg 5,76 行)
|
||
- FeedbackAlg(Alg 3/4,132 行)
|
||
- ✅ build_algorithm.cpp 工厂切换到子类
|
||
- ✅ ExpBase 从 1956 行瘦身到 1105 行(-43%)
|
||
|
||
### Phase 4: 单元测试 ✅
|
||
- ✅ 77 个测试用例(3 个测试文件)
|
||
- ✅ ExpressionEngine 测试(14 用例)
|
||
- ✅ FbStateMachine 测试(11 用例)
|
||
- ✅ 算法组件测试(52 用例,含 BoundChecker/Roller3/FaultCode 工具函数)
|
||
|
||
---
|
||
|
||
## 当前问题:运行时段错误
|
||
|
||
### 已修复的编译问题(12 个 commit)
|
||
- CMake 测试 target include 路径缺失
|
||
- `""` vs `<>` include 风格不符项目规范
|
||
- `enum class DetectMode` 无 `ostream<<`
|
||
- `mix_cc::time_range_t` 未声明
|
||
- 5 个子类未实现纯虚 `doMonProc()`
|
||
- `bound_alg.cpp` 访问私有 `exps_`
|
||
- ExpBase 子类残留旧方法调用
|
||
- roller2/roller3 残留 `init_hold_exp_str`/`exp_messy_code_check`
|
||
|
||
### 当前运行问题
|
||
1. **段错误**:`std::map::operator[]` 中 string 键为 null 指针
|
||
- 根因:VarsCache::tag_num 未初始化(垃圾值),ensureVarCache 惰性检查不可靠
|
||
- 修复:改用 tag_keys.size() 判断(最新 commit fe98fed)
|
||
- 状态:**待验证**
|
||
|
||
2. **表达式变量缺失**:`Unknown variable tag2` 错误日志
|
||
- 已通过 ExpressionEngine 构造函数预初始化 mm_vars 修复(commit b53c061)
|
||
- 状态:**待验证**
|
||
|
||
---
|
||
|
||
## 待完成
|
||
|
||
### 短期(运行调测)
|
||
- [ ] 验证段错误修复(rebuild + GDB 测试)
|
||
- [ ] 验证 `Unknown variable` 错误修复
|
||
- [ ] 全量回归测试(eqpalg-mon 正常运行,报警正常触发)
|
||
|
||
### 中期(代码质量)
|
||
- [ ] 清理 remaining 蓝色 warning(GlobDefine.h format、dsm/public.h return-type)
|
||
- [ ] exp_base.cpp:804 行 `&&` 优先级加括号
|
||
- [ ] glitch_detection.cpp:137 load_exp() 无 return 值
|
||
|
||
### 长期(可选)
|
||
- [ ] VarManager 独立提取(Phase 3a 子步骤)
|
||
- [ ] 为 IHDB 依赖算法(TrendSlope/Roller/GlitchDetection)编写集成测试
|
||
- [ ] TrendSlope2/3 的 hardcoded 60s 时间偏移评估
|
||
|
||
---
|
||
|
||
## 关键文件清单
|
||
|
||
### 新增文件
|
||
| 文件 | 行数 | 说明 |
|
||
|------|------|------|
|
||
| `eqpalg/utility/expression_engine.h` | 130 | 统一表达式引擎头文件 |
|
||
| `eqpalg/utility/expression_engine.cpp` | 240 | 统一表达式引擎实现 |
|
||
| `eqpalg/utility/fb_state_machine.h` | 122 | 反馈状态机头文件 |
|
||
| `eqpalg/utility/fb_state_machine.cpp` | 226 | 反馈状态机实现 |
|
||
| `eqpalg/utility/bound_checker.h` | 56 | 上下限检测器 |
|
||
| `eqpalg/utility/bound_checker.cpp` | 34 | 上下限检测器实现 |
|
||
| `eqpalg/utility/stat_collector.h` | 94 | 统计学习收集器 |
|
||
| `eqpalg/utility/stat_collector.cpp` | 112 | 统计学习收集器实现 |
|
||
| `eqpalg/algs/logic_alg.h/.cpp` | 36 | Alg 1 |
|
||
| `eqpalg/algs/bound_alg.h/.cpp` | 85 | Alg 2 |
|
||
| `eqpalg/algs/bound_hold_alg.h/.cpp` | 76 | Alg 5 |
|
||
| `eqpalg/algs/feedback_alg.h/.cpp` | 132 | Alg 3/4 |
|
||
| `eqpalg/test/test_harness.h` | 84 | 测试框架 |
|
||
| `eqpalg/test/test_main.cc` | 7 | 测试入口 |
|
||
| `eqpalg/test/test_expression_engine.cc` | 140 | 14 测试 |
|
||
| `eqpalg/test/test_fb_state_machine.cc` | 197 | 11 测试 |
|
||
| `eqpalg/test/test_algorithms.cc` | 915 | 52 测试 |
|
||
| `eqpalg/test/README.md` | 295 | 测试文档 |
|
||
|
||
### 删除文件
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `eqpalg/utility/ExpModule.h` | 被 ExpressionEngine 替代 |
|
||
| `eqpalg/utility/ExpModule.cc` | 被 ExpressionEngine 替代 |
|
||
|
||
### 设计文档
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `eqpalg/algs/ALGORITHMS_FUNCTIONAL_DESCRIPTION.md` | 14 个算法功能阐述 |
|
||
| `eqpalg/algs/EXPBASE_REFACTOR_PLAN.md` | ExpBase 解耦方案 |
|
||
| `eqpalg/algs/FBSTATE_DEEP_ANALYSIS.md` | FbStateMachine 7 状态分析 |
|
||
| `eqpalg/algs/UNIFIED_EXPRESSION_ENGINE.md` | 双 FunVars 消除方案 |
|
||
| `eqpalg/eqpalg_changes_2026-05-15.md` | 完整变更文档 |
|
||
| `docs/superpowers/plans/2026-05-15-expression-engine.md` | Phase 1 执行计划 |
|
||
|
||
---
|
||
|
||
## 全部 Commit(35 个)
|
||
|
||
```
|
||
fe98fed fix: ensureVarCache 改用 tag_keys.size() 判断
|
||
f3b1543 fix: ensureVarCache 移到 expression_engine.h 内联
|
||
b53c061 fix: ExpressionEngine 构造函数预初始化 mm_vars
|
||
9758459 fix: 修正 bound_checker_setDetectMode_override 测试预期
|
||
d79d17a docs: 更新 eqpalg 重构变更文档
|
||
06ebc21 fix: roller2/roller3 init_hold_exp_str/exp_messy_code_check 改用 ExpressionEngine
|
||
367802f fix: roller3.cpp DetectMode enum class LOG 输出和 stoi 赋值 cast
|
||
ba0bf8c fix: 清理 ExpBase 子类残留旧方法调用
|
||
43c545e fix: 添加 hasExpression(),修复 bound_alg/exp_bound 编译错误
|
||
18a5675 fix: 子类实现 doMonProc() + 测试 CMake 添加缺失链接文件
|
||
62a2e55 fix: expression_engine.h 添加 <mix_cc/ihyper_db.h>
|
||
dc26b6a fix: enum class CHECK_EQ 改为 CHECK(==)
|
||
5a026ac build: 添加 -Wno-unused-parameter/variable/sign-compare/reorder
|
||
2754b7a docs: 添加 eqpalg 测试说明文档
|
||
4032ff9 fix: 测试文件 "" include 改为 <> 风格
|
||
3f10d4d fix: 为 eqpalg_test 添加缺失 include 路径
|
||
153ce64 docs: 添加 2026-05-15 eqpalg 重构变更文档
|
||
ca2147e test: 核心算法单元测试
|
||
032f0d0 refactor: 切换 build_algorithm 工厂到算法子类
|
||
ae7834a refactor: 算法子类化 — 消除 exp_type_ 分支
|
||
4f8eecd refactor: 提取 StatCollector 统计学习组件
|
||
b9cf5f4 refactor: 提取 BoundChecker 上下限检测组件
|
||
c4bcb66 refactor: 删除旧反馈状态方法和标志
|
||
0106e55 refactor: 集成 FbStateMachine 到 ExpBase::mon_proc()
|
||
fad4ee8 test: FbStateMachine 状态转换单元测试
|
||
9f66fc1 feat: FbStateMachine 状态转换 + 变量操作实现
|
||
f2f6d6f feat: 添加 FbStateMachine 头文件
|
||
e9b2c17 refactor: 删除 ExpModule 类
|
||
3f8d281 fix: 清理 ExpBase 子类残留引用
|
||
38d0942 refactor: 非 ExpBase 算法适配 ExpressionEngine API
|
||
7c2fe7f refactor: ExpBase 表达式管理迁移到 ExpressionEngine
|
||
96ca4d0 refactor: AlgBase 从 ExpModule 迁移到 ExpressionEngine
|
||
f10da49 test: ExpressionEngine 单元测试用例
|
||
693d3b5 feat: ExpressionEngine firstFill + printVars 实现
|
||
e575efd feat: ExpressionEngine FunVars 控制 + hold 变量管理
|
||
5017368 feat: ExpressionEngine 变量刷新实现
|
||
da9eb2e feat: ExpressionEngine 核心实现
|
||
2f7ca1e feat: 添加 ExpressionEngine 头文件声明
|
||
ec8e44c test: 为 eqpalg 添加测试基础设施
|
||
```
|
||
|
||
## 下次继续步骤
|
||
|
||
1. `git pull` 拉取最新代码
|
||
2. `cd eqpalg/build && cmake .. && make -j4` 编译
|
||
3. `bpm debug eqpalg -mon` 运行并检查是否还崩溃
|
||
4. 如崩溃,`bt` 查看 GDB 堆栈
|
||
5. 验证 eqpalg-mon 正常运行,报警功能正常
|
||
6. 清理蓝色 warning
|