今天才学会的DevC++调试器查看连续内存STL容器内值的方法(DevC++)

众所周知,DevC++是一个bug层出不穷的过时的IDE

但因为编译single source方便,简单易上手,还有一些OIer(包括蒟蒻)仍在使用它

如何避免在调试的时候一碰到或者查看C++的一些东西(比如STL容器,cout)就卡住,在OI在役的时候就一直困扰着我

没想到退役这么久后突然发现有一部分有解决方案了


这个方法本来是解决调试器不把指针认为是数组的问题的

像上面这个例子,a是一个数组,p是一个指向数组的指针,调试器看a能看到整个数组,看p却只能看到这个地址的16进制值

我们添加查看*p@5,这个神奇的@表示从内存里p指的位置开始连续读5个相同类型的值,就解决了上面提到的问题


于是我们也可以解决查看vector的问题了

添加查看a:不行,一是会卡住,二是看到的是一个结构体,有指向内存的指针,但看不到数

添加查看a[0]:能看,不会卡住

添加查看&a[0] *&a[0]:能看,得到了连续内存的起始地址,相当于得到了一个指向数组的指针

添加查看*&a[0]@5:我们看到了整个数组

这种方法适用于使用连续内存的STL容器,比如vector queue string

诸如list map的话还是只好老老实实printf了

ref:https://blog.csdn.net/qq_35818307/article/details/104965670

update:这是gdb自带的功能,并不是什么feature【捂脸】

posted @ 2021-12-24 13:26  Flash_Hu  阅读(2565)  评论(0编辑  收藏  举报