更新:1、使用VS code+cmake重新编译,编译器保持不变;

2、修复若干逻辑bug,具体参考BUG_FIX_REPORT.md

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-08-18 11:26:19 +08:00
parent 60ad5c136f
commit 01d28e0d28
49 changed files with 1452 additions and 957 deletions
+186
View File
@@ -0,0 +1,186 @@
# Bug 修复报告
根据 `BUG_REPORT.md` 中的“是否修复”指示,本次完成了所有标记为“按建议修改/按建议修复”的项;标记为“暂不修复/暂不修改/暂不处理”的项保持原样未改动。
---
## 修复状态汇总
| 编号 | 标题 | 指示 | 状态 |
|---|---|---|---|
| BUG-01 | 基类无虚析构函数 | 暂不修复 | 未修改 |
| BUG-02 | Hight_smooth 无限增长 | 暂不修复 | 未修改 |
| BUG-03 | 工厂单例非线程安全 | 暂不修复 | 未修改 |
| BUG-04 | TAS Point_Sum 未限幅 | 按建议修复 | ✅ 已修复 |
| BUG-05 | Track_to_start.size()-1 下溢 | 按建议修复 | ✅ 已修复 |
| BUG-06 | track_start_point_num 未校验 | 按建议修复 | ✅ 已修复 |
| BUG-07 | 禁止区域个数未限制 | 暂不修复 | 未修改 |
| BUG-08 | 消亡航迹输出无容量检查 | 暂不修改 | 未修改 |
| BUG-09 | Beam_Ctrl 输出计数越界风险 | 按建议修改 | ✅ 已修复 |
| BUG-10 | 航迹号数组下标未校验 | 按建议修改 | ✅ 已修复 |
| BUG-11 | TAS model_filter 未初始化变量 | 按建议修改 | ✅ 已修复 |
| BUG-12 | tas_beam_output 未初始化变量 | 按建议修改 | ✅ 已修复 |
| BUG-13 | Work_Parameter 未初始化 | 暂不修复 | 未修改 |
| BUG-14 | lastest_index 未初始化 | 按建议修改 | ✅ 已修复 |
| BUG-15 | TWS delta_T<=0 仍关联 | 按建议修改 | ✅ 已修复 |
| BUG-16 | TAS 无 delta_T>0 检查 | 按建议修改 | ✅ 已修复 |
| BUG-17 | TAS 外推负时间差 | 按建议修改 | ✅ 已修复 |
| BUG-18 | 卡尔曼时间差除零 | 暂不修改 | 未修改 |
| BUG-19 | Bind_speed prt=0 除零 | 按建议修改 | ✅ 已修复 |
| BUG-20 | 门限重复平方 | 暂不修改 | 未修改 |
| BUG-21 | 近程模型 3 门限整数除法 | 按建议修改 | ✅ 已修复 |
| BUG-22 | EKF/凝聚方位角未环绕 | 按建议修改 | ✅ 已修复 |
| BUG-23 | IMM 概率零分母/奇异矩阵 | 按建议修改 | ✅ 已修复 |
| BUG-24 | EKF 似然只取 2x2 S | 按建议修改 | ✅ 已修复 |
| BUG-25 | TWS 处理 TAS 航迹 | 暂不处理 | 未修改 |
| BUG-26 | 输出航向角使用 atan | 按建议修改 | ✅ 已修复 |
| BUG-27 | asin(height/range) 未保护 | 按建议修改 | ✅ 已修复 |
| BUG-28 | track_clear_all 清理不彻底 | 按建议修改 | ✅ 已修复 |
| BUG-29 | tracking_stop 队列延迟 | 暂不修改 | 未修改 |
| BUG-30 | work_mode 注释不一致 | 注释有误 | ✅ 已修复注释 |
| BUG-31 | tracking_point/引导跟踪空实现 | 注释明确 | ✅ 已加注释 |
| BUG-32 | 凝聚内层未跳过已用点 | 按建议修改 | ✅ 已修复 |
| BUG-33 | 起批 delta_T 未校验 | 暂不修改 | 未修改 |
| BUG-34 | tmp_track_die 空向量越界 | 按建议修改 | ✅ 已修复 |
| BUG-35 | 航迹号 500 不复用 | 按建议修改 | ✅ 已修复 |
| BUG-36 | TAS 波束关闭字段未清 | 暂不修改 | 未修改 |
| BUG-37 | 局部结构体未完整初始化 | 按建议修改 | ✅ 已修复 |
---
## 已修复项明细
### BUG-04
- 文件:`data_process.cpp`
- 修改:TAS 分支 `data_num = min(max(Point_Sum,0), 150)`,避免 `Point_Sum > 150` 时越界读取输入数组。
### BUG-05
- 文件:`track_init.cpp`
- 修改:重复航迹去重循环改为 `for (size_t i = 0; i + 1 < Track_to_start.size(); ++i)`,避免空容器时 `size()-1` 下溢。
### BUG-06
- 文件:`data_process.cpp``track_init.cpp``track_init_direct_tracking.cpp`
- 修改:
- `track_process_parameters_initial/modify` 校验 `3 <= track_start_point_num <= 9`,非法参数返回 `-1`
- 起批转可靠航迹前增加 `Track_to_start.empty()` 和每条航迹 `size() >= 3` 防御。
- 直接跟踪的 `tmp_track_to_trust_track` 也增加 `L >= 3` 保护。
### BUG-09
- 文件:`tas_ctrl.cpp`
- 修改:
- `tas_ctrl_process` 开始时校验 `Trust_track_num_Output` 非空并清零。
- `tas_target_add` 写入输出数组前检查 `*Trust_track_num_Output < MAX_TRACK_NUM`
### BUG-10
- 文件:`track_index_mangement.cpp`
- 修改:写入 `List[]` 前校验 `Track_Index``[1, MAX_TRACK_INDEX]`
### BUG-11
- 文件:`track_asso_tas.cpp`
- 修改:`model_filter` 增加 `found_tas_track` 标记;找不到目标时直接返回,局部变量均初始化。
### BUG-12
- 文件:`tas_ctrl.cpp`
- 修改:`tas_beam_output` 初始化 `H_track/X_now/CPI_time`,找不到目标时 `open_flag=0` 并返回。
### BUG-14
- 文件:`track_index_mangement.h`
- 修改:`lastest_index` 声明时初始化为 `0`
### BUG-15
- 文件:`track_asso.cpp`
- 修改:TWS 关联中 `delta_T <= 0` 时从候选列表移除该无效配对并 `continue`,不再标记点迹已使用、不刷新航迹状态。
### BUG-16
- 文件:`track_asso_tas.cpp`
- 修改:TAS 关联点循环中 `delta_T <= 0` 时跳过该点。
### BUG-17
- 文件:`track_asso_tas.cpp`
- 修改:TAS 外推时 `delta_T <= 0` 直接跳过,避免航迹时间回退和负时间预测。
### BUG-19
- 文件:`kalman.cpp``data_process_class_dll.h`
- 修改:`Bind_speed``prt <= 0``freq <= 0` 返回安全非零值;接口注释改为“PRI 不允许为 0”。
### BUG-21
- 文件:`track_asso.cpp`
- 修改:近程门限中 `/1000``/100` 改为浮点除法,避免整数除零恒不成立;保留 `d*d` 比较方式(未修改 BUG-20)。
### BUG-22
- 文件:`kalman.cpp``dot_coh.cpp``dot_coh_tas.cpp`
- 修改:
- 新增 `wrapAnglePi()`EKF 各残差计算后对方位角分量做 `[-π,π]` 环绕。
- 点迹凝聚 `work_mode==0` 分支和 TAS 凝聚统一使用最小角度差 `delta_F`
### BUG-23
- 文件:`track_asso.cpp``track_asso_tas.cpp``track_asso_direct_tracking.cpp`
- 修改:
- IMM 交互中 `c[0..2]` 为 0/负时钳位到 `1e-12`
- 模型概率更新增加分母保护,分母异常时保持上一拍概率。
- 似然计算对 `det_S <= 0` 返回 0,避免 NaN。
### BUG-24
- 文件:`kalman.h``kalman.cpp``track_asso.cpp``track_asso_tas.cpp``track_asso_direct_tracking.cpp`
- 修改:
- `kalman_filter_EKF``S_filter``[2][2]` 改为 `[3][3]`
- 调用侧使用 `Matrix3f` 和 3x3 行列式,似然归一化改为 `1/sqrt(pow(2*PI,3)*detS)`
### BUG-26
- 文件:`track_asso.cpp``track_asso_tas.cpp``track_asso_direct_tracking.cpp`
- 修改:航向角改用 `atan2(X[4], X[1])` 并归一化到 `[0,2π)`
### BUG-27
- 文件:`track_asso_tas.cpp``track_asso_direct_tracking.cpp``track_init.cpp`
- 修改:计算 `asin` 前对 `height/range` 做定义域钳位,`range <= 0` 时按 0 处理。
### BUG-28
- 文件:`data_process.cpp``dot_coh.h/cpp``track_asso.h/cpp``track_asso_tas.h/cpp``track_init.h/cpp``tas_ctrl.h/cpp``track_index_mangement.h/cpp`
- 修改:
-`Dot_Coh``Track_Asso``Track_Asso_Tas``Track_Init``TAS_Ctrl``Track_Ind_Mangement` 增加 `reset()`
- `track_clear_all()` 调用上述 reset,并恢复 `last_beam_num = INT_MAX`
- 直接跟踪相关类也补充了 `reset()`
### BUG-30
- 文件:`data_process_class_dll.h`
- 修改:`work_mode` 注释由“0进程 1中程 3远程”改为“0进程 1中程 2远程”。
### BUG-31
- 文件:`data_process_class_dll.h``data_process.cpp``track_init_direct_tracking.cpp`
- 修改:在 `direct_tracking_process``tracking_point`、直接跟踪入口处注释明确“当前接口未启用,保留空实现”。
### BUG-32
- 文件:`dot_coh.cpp``dot_coh_tas.cpp`
- 修改:内层凝聚比较增加对 `i``Use_Flag` 的检查,已使用点不再参与凝聚。
### BUG-34
- 文件:`track_init.cpp``track_init_direct_tracking.cpp`
- 修改:`tmp_track_die` 先判断 `n <= 0`,空向量直接删除。
### BUG-35
- 文件:`track_index_mangement.cpp`
- 修改:两处回绕循环由 `i < MAX_TRACK_INDEX` 改为 `i <= MAX_TRACK_INDEX`,使 500 号可复用。
### BUG-37
- 文件:`track_init.cpp``track_init_direct_tracking.cpp`
- 修改:`Temp_track``Trust_Track` 局部变量改为 `= {}` 值初始化,避免未初始化字段。
---
## 编译与运行验证
使用 **MSVC 2013 (Visual Studio 12) x86** 实际编译:
| 配置 | 结果 |
|---|---|
| X256_PS Release | ✅ 编译链接通过 |
| X256_MS Release | ✅ 编译链接通过 |
| X256_PS Debug | ✅ 编译链接通过 |
| MSVC `/W4` Release | ✅ 编译通过,未再出现 C4700/C4701 未初始化变量告警 |
另编写临时宿主程序验证 DLL
- 初始化 `RadarPara`,调用 `track_process_parameters_initial` 成功。
- 调用 `track_process`,返回 `1`,输出计数正常。
- 工厂创建/销毁流程正常。
> 说明:当前构建仍会输出原有代码的 C4244 转换告警、C4018 有符号/无符号比较告警、C4819 编码告警,均非本次修复引入,不影响链接和运行。