我想知道如何用 GDB 查看 C++ STL 容器(如 map 、priority _ queue)中的每个元素的值。
网上也有一个方法,就是下载一个脚本,替换配置,我在本机也是这么设置的。
可是,我们马上就要考试了,我亲测考场电脑里没有那个脚本(考试也不可能开网),我想知道考试时如何使用 GDB 查看 STL 元素的值(当然可以直接写函数输出,但是总觉得这样太烦了)
考试环境: 系统:Ubuntu 14.04 LTS 。 内置软件(都是纯净的):vim 、 gedit 、g++/gcc&gdb 、guide 、python3 ……(反正其他的就是 Ubuntu 自带了)
1
ruanimal 2020-09-30 10:06:22 +08:00
不懂,C++就是麻烦
|
2
InkStone 2020-09-30 10:17:52 +08:00
你可以试一下,stl 的内部结构也没复杂到看不到每个元素值的地步……我记得早期一些 IDE 没有对 STL 的支持,也都是手动展开来看的。
不过你们这考试也太折腾人了吧,连 IDE 都不给一个。 |
3
zvl0reqglvd 2020-09-30 10:18:52 +08:00
print 数组首地址 @查看长度
|
4
yanyanlongxia OP @zvl0reqglvd 请问能举个例子吗?谢谢了(主要是没太看懂)
|
5
yanyanlongxia OP @InkStone 其实我平时用的 CLion 就自带完美支持查看 STL,只是考试没有……
|
6
yanyanlongxia OP 突然发现在程序里写一个 print 函数,在 gdb 里面需要时调用 call print()就很简单……
|
7
disk 2020-09-30 17:20:45 +08:00
14.04 有点老了,不知道 gdb 版本是多少,7.0 后才支持 python 拓展,系统自带的直接 p STL 变量就完事了。不然就先 p vec 看下结构,然后按照输出的结构 p *(vec._M_impl._M_start)@vec.size(),不知道行不行。
|
8
yanyanlongxia OP @disk GDB 版本是 7.7.1 的,请问能细说一下怎么用吗?谢谢
|
9
disk 2020-10-03 20:39:46 +08:00
@yanyanlongxia 你需要去看下 GDB 的使用教程。要查看一个变量,你至少需要它的首地址,如果是顺序存储要看长度,如果是复杂的结构要考虑指出类型。像 map 这种红黑树实现不靠脚本看起来是很麻烦的,你可以写一个 print 函数把容器的元素遍历打印出来,然后在调试中随时 call 这个函数来查看。
|
10
yanyanlongxia OP @disk emmm……我好像就是这么做的。(手写 print 函数应对一切数据结构)
|
11
nightwitch 2020-10-08 21:06:35 +08:00
你们考场不给提供 IDE ? 不可能吧 国内的计算机教学水准已经提高到人均都能 gdb debug 的程度了?
|
12
yanyanlongxia OP @nightwitch (其实是竞赛
|
13
yanyanlongxia OP 就是全国信息学奥林匹克联赛
|
14
yanyanlongxia OP (其实我觉得 gdb 调试的扩展性比 IDE 要强很多
|