
捉虫记
文章平均质量分 82
分享和记录日常工作中解决过的程序bug,作为经验教训集锦
IT老兵2025
25载IT老兵,早年曾任职华为,UT斯达康等通信大厂,20年+的大型电信软硬件系统研发与项目管理实践;近5年的技术研究重点在高并发通信系统(20G+),网络安全与高效密码系统,嵌入式通信与CPU+GPU/NPU异构系统,linux内核与高性能驱动研发;近期兴趣重点在AI+通信,特别AI智能语音的应用落地。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
系统重复初始化引起的状态灯异常问题
摘要:某公司RISC-V架构PCIE加速卡新增在线固件升级功能后,出现第二阶段状态灯运行时状态灯失效问题。经排查发现,引导固件和功能固件共用代码时,跳转函数调用位置不当导致定时器被重复初始化。具体表现为主程序中xxx_check2boot_second_firmware调用位置靠后,使定时器初始化被执行两次,与激活的中断回调形成冲突。解决方案是将跳转函数提前至所有非必要初始化操作之前执行。该案例揭示了多阶段引导系统中跳转时机的重要性,避免重复初始化引发的硬件冲突。(150字)原创 2025-06-15 17:49:00 · 890 阅读 · 0 评论 -
利用gdb定位线程栈被破坏场景: Backtrace stopped
在调试RK3399模块时,开发人员遇到程序启动时小概率异常的问题。使用gdb调试时,发现主线程被挂死,且线程栈信息被破坏,无法完整查看。通过gdb的x命令分析寄存器信息和内存信息,最终定位到问题根源:公共日志函数Kb_LogStr中的日志长度判断不足,导致vfprintf内存溢出,进而引发系统异常和死锁。解决方案包括修复Kb_LogStr中的日志长度判断问题,并修改信号量处理回调函数ITP_Handle_Sig中的日志调用逻辑,避免死锁。原创 2025-05-18 12:28:29 · 1353 阅读 · 0 评论 -
参数类型定义不当导致的内存分配失败
问题出现在一个LDPC解码仿真程序中,当输入校验矩阵的维度较大时,程序启动时会因内存分配失败而闪退。通过调试日志,作者发现内存分配失败的原因是变量类型定义溢出,具体是使用了2字节的short类型,当矩阵节点数量超过该类型表示的最大值时,相关变量会溢出变为负数,导致内存分配失败。解决办法是将相关变量的类型改为范围更长的int或long类型,并同步修订全局的INX宏定义。此外,作者建议在定位问题时,可以通过gdb对函数加断点进行启动调试,以提高定位效率原创 2025-05-16 11:21:27 · 410 阅读 · 0 评论