今天才学会的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【捂脸】