GDB使用gdb-stl-views打印STL容器元素
简介
使用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容器元素相关推荐
- 【gdb配置】打印stl容器,.gdbinit文件
1. gdb打印C++ STL容器 原生gdb通过p打印C++容器,打印出的内容往往难以理解,通过以下的脚本可以实现常用容器的打印. 拷贝以下内容到新文件stl_views_1.0.3.gdb # # ...
- (P85)stl(十三):容器适配器,stack,queue,优先级队列priority_queue,make_heap
文章目录 1.容器适配器 2.stack 3.queue 4.优先级队列priority_queue 5.make_heap 6.set 1.容器适配器 利用基本容器构造的容器,称之为容器适配器 基本 ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- c++ STL 常用容器元素类型相关限制 指针 引用
c++ 的 STL 中主要有 vector , list, map, set , multimap,multiset 这些容器完全支持使用内置类型和指针(指针注意内存泄露问题). 就是说乱用智能指针 ...
- STL中的set容器的一点总结
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- C++STL的set/ multiset容器
C++STL的set/ multiset容器 set基本概念 set大小和交换 set插入和删除 set查找和统计 set和multiset区别 pair对组创建 set容器排序 set基本概念 简介 ...
- C++ STL : 模拟实现STL中的关联式容器unordered_map/unordered_set
目录 unordered_map/unordered_set unordered_map/unordered_set与map/set的区别 底层哈希桶的改造 仿函数 Key值的获取方法 hash(ke ...
- C++ STL : 模拟实现STL中的容器适配器stack和queue
目录 什么是容器适配器 stack stack的文档介绍-(来自cplusplus) stack的实现 queue queue的文档介绍-(来自cplusplus) queue的实现 什么是容器适配器 ...
- 【C++ STL学习之一】容器的共通能力和共通操作总结
一.C++ STL各容器有一些共通的能力 其中三个最核心的能力是: (1)所有容器提供的是"value语意"而不是"reference语意". 容器进行元素的安 ...
- C++ STL学习笔记(2) 容器结构与分类
接着学习侯捷老师的C++ STL! 在使用容器的时候,需要明白容器中元素之间在内存里的关系是什么样的,是连续的,还是非连续的. 容器可以分为两类: 1. sequence container , 即序 ...
最新文章
- 11种常见SQLMAP使用方法详解
- 如何在 Linux 上安装服务器管理软件 Cockpit
- python数据库密码如何加密_MySQL怎么设置密码
- 服务器意外重启导致storm报错的问题处理
- P6378 [PA2010] Riddle(2-sat/前后缀优化建图)
- zhilizhili-ui 2016始动 开始做个样例站吧 (一)
- 异步数据加载和Tab选项卡
- Unity手游开发与实战
- 如何进行linux内核开发,2. 开发流程如何工作 — The Linux Kernel documentation
- 跟我一起认识axure(二)
- Vmware Workstation常用操作和常见问题
- 写表单验证等页面的总结
- SDI在自定义的工具栏上添加下拉控件
- 分布式架构设计之电商平台
- 推导抛物线插值的拉格朗日插值公式
- c语言的Hello World
- 工商服务代理行业解决方案
- java开发-微信支付
- 【判断是否为手机号】
- 自制密码生成器1.0