2、修复若干逻辑bug,具体参考BUG_FIX_REPORT.md Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
8.7 KiB
8.7 KiB
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。
- IMM 交互中
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 编码告警,均非本次修复引入,不影响链接和运行。