V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yanyanlongxia
V2EX  ›  C++

关于 GDB 查看 STL 元素值

  •  1
     
  •   yanyanlongxia · 2020-09-30 09:42:50 +08:00 · 2072 次点击
    这是一个创建于 737 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想知道如何用 GDB 查看 C++ STL 容器(如 map 、priority _ queue)中的每个元素的值。

    网上也有一个方法,就是下载一个脚本,替换配置,我在本机也是这么设置的。

    可是,我们马上就要考试了,我亲测考场电脑里没有那个脚本(考试也不可能开网),我想知道考试时如何使用 GDB 查看 STL 元素的值(当然可以直接写函数输出,但是总觉得这样太烦了)

    考试环境: 系统:Ubuntu 14.04 LTS 。 内置软件(都是纯净的):vim 、 gedit 、g++/gcc&gdb 、guide 、python3 ……(反正其他的就是 Ubuntu 自带了)

    14 条回复    2020-10-10 15:57:10 +08:00
    ruanimal
        1
    ruanimal  
       2020-09-30 10:06:22 +08:00
    不懂,C++就是麻烦
    InkStone
        2
    InkStone  
       2020-09-30 10:17:52 +08:00
    你可以试一下,stl 的内部结构也没复杂到看不到每个元素值的地步……我记得早期一些 IDE 没有对 STL 的支持,也都是手动展开来看的。

    不过你们这考试也太折腾人了吧,连 IDE 都不给一个。
    zvl0reqglvd
        3
    zvl0reqglvd  
       2020-09-30 10:18:52 +08:00
    print 数组首地址 @查看长度
    yanyanlongxia
        4
    yanyanlongxia  
    OP
       2020-09-30 15:53:59 +08:00
    @zvl0reqglvd 请问能举个例子吗?谢谢了(主要是没太看懂)
    yanyanlongxia
        5
    yanyanlongxia  
    OP
       2020-09-30 15:55:11 +08:00
    @InkStone 其实我平时用的 CLion 就自带完美支持查看 STL,只是考试没有……
    yanyanlongxia
        6
    yanyanlongxia  
    OP
       2020-09-30 16:50:43 +08:00
    突然发现在程序里写一个 print 函数,在 gdb 里面需要时调用 call print()就很简单……
    disk
        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(),不知道行不行。
    yanyanlongxia
        8
    yanyanlongxia  
    OP
       2020-10-01 11:43:01 +08:00
    @disk GDB 版本是 7.7.1 的,请问能细说一下怎么用吗?谢谢
    disk
        9
    disk  
       2020-10-03 20:39:46 +08:00
    @yanyanlongxia 你需要去看下 GDB 的使用教程。要查看一个变量,你至少需要它的首地址,如果是顺序存储要看长度,如果是复杂的结构要考虑指出类型。像 map 这种红黑树实现不靠脚本看起来是很麻烦的,你可以写一个 print 函数把容器的元素遍历打印出来,然后在调试中随时 call 这个函数来查看。
    yanyanlongxia
        10
    yanyanlongxia  
    OP
       2020-10-06 00:41:08 +08:00
    @disk emmm……我好像就是这么做的。(手写 print 函数应对一切数据结构)
    nightwitch
        11
    nightwitch  
       2020-10-08 21:06:35 +08:00
    你们考场不给提供 IDE ? 不可能吧 国内的计算机教学水准已经提高到人均都能 gdb debug 的程度了?
    yanyanlongxia
        12
    yanyanlongxia  
    OP
       2020-10-10 15:31:54 +08:00
    @nightwitch (其实是竞赛
    yanyanlongxia
        13
    yanyanlongxia  
    OP
       2020-10-10 15:32:37 +08:00
    就是全国信息学奥林匹克联赛
    yanyanlongxia
        14
    yanyanlongxia  
    OP
       2020-10-10 15:57:10 +08:00
    (其实我觉得 gdb 调试的扩展性比 IDE 要强很多
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2325 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 10:21 · PVG 18:21 · LAX 03:21 · JFK 06:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.