简介

使用gdb调试C++程序时,无法使用命令p 变量名输出STL容器的元素数据。例如有一个std::vector<int> datas变量, 执行p datas,输出如下:

(gdb) p datas
$2 = {<std::_Vector_base<int, std::allocator<int> >> = {_M_impl = {<std::allocator<int>> = {<__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, members of std::_Vector_base<int, std::allocator<int> >::_Vector_impl: _M_start = 0x606010, _M_finish = 0x60601c, _M_end_of_storage = 0x606020}}, <No data fields>}

可以使用一个名为gdb-stl-views的小工具,下载完成后,将其改名为.gdbinit并放置到home目录下,然后再执行输出STL容器内容的新命令,对于std::vector,执行pvector datas,输出信息如下:

(gdb) pvector datas
elem[0]: $3 = 1
elem[1]: $4 = 2
elem[2]: $5 = 3
Vector size = 3
Vector capacity = 4
Element type = std::_Vector_base<int, std::allocator<int> >::pointer

新命令

对于STL的各种容器,输出其元素的命令如下:

容器类型 GDB 命令
std::vector pvector
std::list plist
std::map pmap
std::multimap pmap
std::set pset
std::multiset pset
std::deque pdeque
std::stack pstack
std::queue pqueue
std::priority_queue ppqueue

对于std::vector,输出命令为pvector 变量名,而对于std::map,输出命令为pmap 变量名 键类型 值类型,就需要给出除变量之外的其他信息。

要查看某一个命令的所有用法,可以使用命令help 命令。例如使用help pmap,可以得到如下信息:

(gdb) help pmapPrints std::map<TLeft and TRight> or std::multimap<TLeft and TRight> information. Works for std::multimap as well.Syntax: pmap <map> <TtypeLeft> <TypeRight> <valLeft> <valRight>: Prints map size, if T defined all elements or just element(s) with val(s)Examples:pmap m - prints map size and definitionpmap m int int - prints all elements and map sizepmap m int int 20 - prints the element(s) with left-value = 20 (if any) and map sizepmap m int int 20 200 - prints the element(s) with left-value = 20 and right-value = 200 (if any) and map size

参考

GDB中查看STL容器类的内容
在linux用gdb查看stl中的数据结构

GDB使用gdb-stl-views打印STL容器元素相关推荐

  1. 【gdb配置】打印stl容器,.gdbinit文件

    1. gdb打印C++ STL容器 原生gdb通过p打印C++容器,打印出的内容往往难以理解,通过以下的脚本可以实现常用容器的打印. 拷贝以下内容到新文件stl_views_1.0.3.gdb # # ...

  2. (P85)stl(十三):容器适配器,stack,queue,优先级队列priority_queue,make_heap

    文章目录 1.容器适配器 2.stack 3.queue 4.优先级队列priority_queue 5.make_heap 6.set 1.容器适配器 利用基本容器构造的容器,称之为容器适配器 基本 ...

  3. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  4. c++ STL 常用容器元素类型相关限制 指针 引用

    c++ 的 STL 中主要有 vector , list, map, set  , multimap,multiset 这些容器完全支持使用内置类型和指针(指针注意内存泄露问题). 就是说乱用智能指针 ...

  5. STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  6. C++STL的set/ multiset容器

    C++STL的set/ multiset容器 set基本概念 set大小和交换 set插入和删除 set查找和统计 set和multiset区别 pair对组创建 set容器排序 set基本概念 简介 ...

  7. C++ STL : 模拟实现STL中的关联式容器unordered_map/unordered_set

    目录 unordered_map/unordered_set unordered_map/unordered_set与map/set的区别 底层哈希桶的改造 仿函数 Key值的获取方法 hash(ke ...

  8. C++ STL : 模拟实现STL中的容器适配器stack和queue

    目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...

  9. 【C++ STL学习之一】容器的共通能力和共通操作总结

    一.C++ STL各容器有一些共通的能力 其中三个最核心的能力是: (1)所有容器提供的是"value语意"而不是"reference语意". 容器进行元素的安 ...

  10. C++ STL学习笔记(2) 容器结构与分类

    接着学习侯捷老师的C++ STL! 在使用容器的时候,需要明白容器中元素之间在内存里的关系是什么样的,是连续的,还是非连续的. 容器可以分为两类: 1. sequence container , 即序 ...

最新文章

  1. 11种常见SQLMAP使用方法详解
  2. 如何在 Linux 上安装服务器管理软件 Cockpit
  3. python数据库密码如何加密_MySQL怎么设置密码
  4. 服务器意外重启导致storm报错的问题处理
  5. P6378 [PA2010] Riddle(2-sat/前后缀优化建图)
  6. zhilizhili-ui 2016始动 开始做个样例站吧 (一)
  7. 异步数据加载和Tab选项卡
  8. Unity手游开发与实战
  9. 如何进行linux内核开发,2. 开发流程如何工作 — The Linux Kernel documentation
  10. 跟我一起认识axure(二)
  11. Vmware Workstation常用操作和常见问题
  12. 写表单验证等页面的总结
  13. SDI在自定义的工具栏上添加下拉控件
  14. 分布式架构设计之电商平台
  15. 推导抛物线插值的拉格朗日插值公式
  16. c语言的Hello World
  17. 工商服务代理行业解决方案
  18. java开发-微信支付
  19. 【判断是否为手机号】
  20. 自制密码生成器1.0

热门文章

  1. Docker 方式 MySQL 主从搭建
  2. StreamSets sdc rpc 测试
  3. MapReduce :通过数据具有爷孙关系的结果
  4. 第41课 WEB代理、Haproxy 配置详解及Haproxy ACL使用
  5. MyCAT-1.4-RC基准测试
  6. Facebook 开源 React Native - iOS移动开发周报
  7. javascript 基础之事件(event)-------1
  8. arailsdemo 1
  9. Hibernate深入浅出(六)事务2——锁locking
  10. Citrix XenAPP域迁移操作步骤