十一、做高并发内存池项目过程中遇到的bug以及调试bug的方法和心得

十一、做高并发内存池项目过程中遇到的bug以及调试bug的方法和心得

第一个bug是内存问题,程序直接崩溃,问题出现在:GetOneSpan函数中的切分span的时候结尾的span1的next没有置空。

第二个bug是还小内存块给span的时候找不到小内存所属的span,原因是NewSpan函数中的一个if分支返回前没有把id和span*的映射关系存好。

修bug前:

修bug后:

第三个bug出现在释放内存的判断条件上,自己定义的变量MAX_BYTES和C++库里面定义的一个宏MAXBYTES混到了一起,本来是用自己定义的这个MAX_BYTES变量作为判断条件的,但是手误写成了C++库中的宏MAXBYTE,导致释放内存的时候出现了很严重的问题,这个bug调试了三天才调试出来,真的很坑。

修改bug前:

修bug后:

我在调上述bug的时候所用的技巧:

1、首先用屏蔽法,先判断是那一段逻辑出现问题,比如先屏蔽内存池释放的逻辑,看看程序是否能正常运行,如果能则说明就是释放的逻辑出了问题,再对释放的逻辑使用屏蔽法排查。

2、在确定了大概是哪一段逻辑出现问题之后可以利用条件断点查看运行到某一个地方的时候的结果是否符合预期。

3、可以查看调试中的调用堆栈查看函数的调用情况。

4、在调试过程中发现疑似死循环的时候可以点击中断程序查看。

以上是一些很实用的调试技巧,但是调试程序最终还是要逐步看,逐步分析结果,一定要细心分析才能调出bug。由于这个项目都是内存分配的问题,出现bug非常不好查,总之一句话,写的时候认真认真再认真,重要的事情说三遍,不然一个bug够你调3天的了。

那这个项目就到此为止了,你做得怎么样呢?做的过程中有没有遇到过什么bug呢?如果有,你是怎么解决的呢?不妨来评论区留言一下,让更多的小伙伴能够早早避坑吧!!!

相关推荐
sukalot几秒前
windows 驱动实例分析系列: libusb驱动分析-应用层源码篇(三)
windows·驱动开发
万法若空7 分钟前
C/C++ 类型别名定义方式对比
java·c语言·c++
Java后端的Ai之路28 分钟前
03、Python - 抽象工厂模式
开发语言·python·设计模式·抽象工厂模式·通用智慧
吴声子夜歌28 分钟前
Java——开发中通用的方法和准则(一)
java·开发语言
常驻客栈1 小时前
B-深入理解计算机系统第3版之第11章:网络编程
开发语言·笔记·学习笔记·常驻客栈·深入理解计算机系统
旧梦95271 小时前
Java 单例模式:从基础到实战的完整指南
java·开发语言·单例模式
小小晓.2 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
hetao17338372 小时前
2026-08-27~29 hetao1733837 的刷题记录
c++·算法
格林威2 小时前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
chen<>2 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++