首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不带类型信息的Gdb stl漂亮打印

是指在使用Gdb调试工具时,对于STL(标准模板库)容器类型的变量进行打印输出时,不显示其具体的类型信息,而是以一种美观的方式展示容器中的元素。

在C++中,STL提供了多种容器类型,如vector、list、map等,这些容器类型在调试过程中经常被使用。而在使用Gdb进行调试时,默认情况下,对于STL容器类型的变量,Gdb只会显示其内存地址,而不会直观地展示容器中的元素。

为了解决这个问题,可以使用Gdb的Python扩展功能来实现不带类型信息的STL漂亮打印。具体步骤如下:

  1. 首先,确保你的Gdb版本支持Python扩展功能。可以通过在Gdb命令行中输入"python print('Hello, World!')"来检查。
  2. 创建一个名为.gdbinit的文件,并在其中添加以下内容:
代码语言:txt
复制
python
import sys
sys.path.insert(0, '/path/to/stl-pretty-printer')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers(None)
end

其中,'/path/to/stl-pretty-printer'是STL漂亮打印器的路径,你可以从GitHub上找到并下载。

  1. 将.gdbinit文件放置在你的工程目录下,或者将其路径添加到环境变量中。
  2. 使用Gdb调试你的程序,并在需要打印STL容器的地方设置断点。
  3. 当程序运行到断点处时,可以使用"p"命令(或"print"命令的简写)来打印STL容器变量。例如,对于一个名为"myVector"的vector容器,可以输入"p myVector"来打印其内容。

通过以上步骤,你将能够在Gdb调试过程中以一种美观的方式打印输出STL容器的元素,而无需手动遍历容器并逐个打印。

推荐的腾讯云相关产品:腾讯云服务器(CVM)和腾讯云调试器(Cloud Debugger)。腾讯云服务器提供了高性能、可靠稳定的云服务器实例,可用于搭建开发环境和进行调试。腾讯云调试器是一种云端调试工具,可帮助开发者在生产环境中进行代码调试和问题定位。

腾讯云服务器产品介绍链接地址:https://cloud.tencent.com/product/cvm 腾讯云调试器产品介绍链接地址:https://cloud.tencent.com/product/cdbg

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

gdb打印vector(亲测有效)

最新在使用gdb调试c++代码时候,发现无法使用print命令直接打印vector对象,在网上查阅了很多资料之后,发现都是这么说: 1)打印整个vector (gdb) p *(myVector...果然,在实际测试过程中,我们发现如下问题: 1)无法直接使用size()命令,如下所示: 这个可能与程序本身有关系,这里不再展开,如果想获取vector个数,并且打印整个vector信息,可以直接参考...:stl-views-1.0.3.gdb,下载之后放到指定路径下,然后在启动gdb时候,可以通过source引入该文件,支持很多常见stl容器打印,非常方便: 2)使用@N无法打印第N个元素,...实际测试结果发现效果为:打印前N个元素,例如@2,会打印vector第一个和第二个元素,如果要打印第N个元数据,我们可以通过如下两种方式: // 这两种方式,编号均从0开始 (gdb) p (myVector...当前测试GDB版本为7.9.1,还不能直接用print命令打印vector 参考文档 https://sourceware.org/gdb/wiki/STLSupport?

1.5K20

gdb调试容器和命令保存

一、gdb调试容器或者智能指针内容 有时候我们需要debug一些core文件或者程序,但是如果遇到STL容器,p打印是一些红黑树或者原始数据机构,这给我们调试带来不必要麻烦。...gdb 内置了 Python 支持,因此可以轻松编写一个函数来打印出任何 stl 结构内容。gcc 4.5 已经提供所需 python 脚本,以使 gdb 智能地处理 stl 数据结构。...https://gist.github.com/skyscribe/3978082像这个脚本提供了一些打印容器宏,或者这里:http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views...-1.03.txt 有了这些宏,就可以打印出响应容器 wget http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt cat dbinit_stl_views...在gdb调试时候,使用source ~/.gdbinit加载这些宏操作。 如果你gdb在运行当中,需要重启启用下,这些宏才生效。 阅读这些代码宏,也可以帮助你理解stl结构。

1.8K400

GDB调试指南-变量查看

既然如此,我们就不得不了解一些查看各种类型变量方法,以帮助我们进一步定位问题。...例如,打印基本类型,数组,字符数组等直接使用p 变量名即可: (gdb) p a $1 = 10 (gdb) p b $2 = {1, 2, 3, 5} (gdb) p c $3 = "hello,shouwang...按照特定格式打印变量 对于简单数据,print默认打印方式已经足够了,它会根据变量类型格式打印出来,但是有时候这还不够,我们需要更多格式控制。...语法如下: x/[n][f][u] addr 其中: n 表示要显示内存单元数,默认值为1 f 表示要打印格式,前面已经提到了格式控制字符 u 要打印单元长度 addr 内存地址 单元类型常见有如下...或者去使能: disable display num #num为前面变量前编号,不带num时去使能所有 查看寄存器内容 (gdb)info registers rax 0x0

2.4K10

使用Rclone访问腾讯云COS教程

主要功能 MD5/SHA1进行文件完整性校验(对于S3存储,通过MD5) 保存文件修改时间(对于S3存储,通过x-amz-meta-mtime元信息) Copy模式只拷贝新增和变化文件 Sync模式使得目的和源文件夹完全一样.../.config/rclone/rclone.conf,windows:C:\Users\test_user\.config\rclone.conf: [cos] type = s3 # s3后端存储类型...= YYYYYYYYYYYYYYYYYYY # 腾讯云secretKey endpoint = cos.ap-guangzhou.myqcloud.com # COS域名 也可以通过执行rclone.../storage目录下,该操作会将/storage下所有其他文件删除掉 rclone ls cos:rclone-test-1251668577,列出rclone-test-1251668577根目录下文件...oss:oss-test-bucket-1215715707/ --include=/stl-views.gdb,删除根目录下stl-views.gdb文件,如果不带/前缀,则会删除所有stl-views.gdb

10.5K30

GDB调试入门,看这篇就够了

(gdb)attach 小结 本节主要介绍了两种类型GDB启动调试方式,分别是调试未运行程序和已经运行程序。对于什么样程序能够进行调试也进行了简单说明。...例如,打印基本类型,数组,字符数组等直接使用p 变量名即可: (gdb) p a $1 = 10 (gdb) p b $2 = {1, 2, 3, 5} (gdb) p c $3 = "hello,shouwang...按照特定格式打印变量 对于简单数据,print默认打印方式已经足够了,它会根据变量类型格式打印出来,但是有时候这还不够,我们需要更多格式控制。...语法如下: x/[n][f][u] addr 其中: n 表示要显示内存单元数,默认值为1 f 表示要打印格式,前面已经提到了格式控制字符 u 要打印单元长度 addr 内存地址 单元类型常见有如下...值,上面可以带或不带该值,如果不带num,则针对所有skip,如果带上了,则只针对某一个skip。

7.3K62

GDB调试还不会?看这篇就够了!

(gdb)attach 20829 总结 本文主要介绍了两种类型GDB启动调试方式,分别是调试未运行程序和已经运行程序。对于什么样程序能够进行调试也进行了简单说明。...例如,打印基本类型,数组,字符数组等直接使用p 变量名即可: (gdb) p a $1 = 10 (gdb) p b $2 = {1, 2, 3, 5} (gdb) p c $3 = "hello,shouwang...按照特定格式打印变量 对于简单数据,print默认打印方式已经足够了,它会根据变量类型格式打印出来,但是有时候这还不够,我们需要更多格式控制。...语法如下: x/[n][f][u] addr 其中: n 表示要显示内存单元数,默认值为1 f 表示要打印格式,前面已经提到了格式控制字符 u 要打印单元长度 addr 内存地址 单元类型常见有如下...值,上面可以带或不带该值,如果不带num,则针对所有skip,如果带上了,则只针对某一个skip。

4K21

Doris开发手记3:利用CoreDump文件快速定位Doris查询问题

当BE出现进程Crash时,都会将运行时堆栈打印到be.out文件中,一般如下图所示: ? 但是由于这部分信息并不完整,只能大致帮助定位到可能SQL查询。...使用GDB打开CoreDump文件 gdb be/lib/palo_be core.13610 通常core文件会生成在BE进程启动目录,但是如果额外配置过core-pattern,就得到对应目录上找到对应...通过查询栈索引到QueryID 打开之后,用bt命令展开堆栈,得到展开之后详细堆栈信息 #0 0x00000000013957c6 in std::_Bit_reference::operator...我们可以看到,栈9上是doris::PlanFragmentExecutor函数调用,所以通过f 9切换到栈9,并打印_query_id。...并不是我们真正需要十六进制,所以还得继续通过GDB打印对应十六进制query_id。

1.4K40

日更系列 - 又一次碰到非线程安全std容器core

最后汇聚所有场景打分信息。 二、问题复现 有一天,开发代码进行了灰度发布,隔一段时间会有个core文件。使用gdb打印信息如下。...v消息20220602-170753 (2).jpg 把m_cvr2内容进行了打印(因为容器元素很多,这里使用了gdb内置命令set logging on,将std out屏幕输出写份副本到文件名gdb.txt...作为对比,我们也打印了m_ctr和m_cvr容器) 可以看到这个m_cvr2[场景id为258]map没有clear成功。...截屏2022-06-02 下午5.44.51.png 四、总结 这类问题起因不是直观,因为不是我们stl中容器clear实现有bug,本质上我们没有很熟悉容器是非线程安全特性。...所以总结一些使用std容器一些准则, 并发使用不新增元素(这里元素如果是简单类型pld是允许,而非pld类型,如string或者各种类结构体是不允许) 使用前在同一线程进行预填充。

91720

那些奇奇怪怪缓冲问题

更改缓冲类型 在上一篇中说到了一些默认缓冲类型,例如: 指向终端设备流是行缓冲 标准错误是不带缓冲 指向文件流是全缓冲 …… 那么这些默认缓冲类型如何修改?...NULL,将其变成了不带缓冲,因此你运行后发现,printf打印会立即显示在终端。...printf打印日志没有输出 不知道你有没有遇到过这样情况,准备调试某一个bug,发现每次运行到某个地方,打印就结束了,然后就挂了,让你误以为程序执行到打印地方就结束了,然而有可能程序执行到后面,...只是由于打印是行缓冲,导致部分打印没有出来,很可能就是你没有加上换行符打印而已。...这时候你可以设置为不带缓冲,或者关键位置fflush,或者打印记得加上换行符。 当然你还可以用GDB,参考《GDB调试指南》。

1.3K10

linux下gdb常用调试命令

info frame 查看当前堆栈帧更详细信息 print a 打印变量信息 print/x a 十六进制输出变量信息 print a + b 可以进行表达式计算 print $eax 显示某个寄存器数据...w: 4字节; g: 8字节) set vairiable a = 100 可以修改变量值 commands 指定到了特定断点后执行命令序列 whatis buf 显示变量类型 dump memory...gdb会从这个文件读取配置 cat ~/.gdb_history 呵呵,对于gdb时想要查看长字符串老是显示不全,怎么半呢,gdb参看数组字符串时默认只是显示部分数据,通过这个命令可以修改:...,GDB会显出函数参数地址。...这个选项默认为off set print pretty on 如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮 set print union 设置显示结构体时

2.9K20

Linux 编译安装 GCC 4.9

多项链接优化(包含对类型合并功能重写、函数体按需加载等)[Debug模式Firefox内存消耗从15GB降到3.5GB,链接时间从1700秒降到350秒] Inter-procedural优化改进...(包含新继承类型分析模型、直接调用转为非直接调用和本地符号别名等) Feedback优化(包含对c++内联函数性能分析改进、函数排序等) 支持OpenMP 4.0[并行计算] C、C++、Fortran...增加date-time警告 GNAT切换到Ada2012 C/C++ 增加编译信息带颜色输出(-fdiagnostics-color=auto) 单指令多数据(SIMD)指令无循环依赖断言 支持...7.7.1 (如果存在ncurses-devel包) 注: (所有的库都会被安装在$PREFEX_DIR里) 额外建议: 给特定用户安装 gdbpretty-printer 用以友好打印...stdc++stl容器 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python功能 安装完成后,把[GCC源码目录]/

7.5K10

认真理一理这些奇怪缓冲问题

上一篇《不可不知Linux中三种缓冲模式》中说到了三种缓冲类型,这一篇主要讲与缓冲相关函数,这些函数可以修改默认缓冲类型,及在实际中可能遇到问题。...通过设置stdout(标准输出)第二个参数为NULL,将其变成了不带缓冲,因此你运行后发现,printf打印会立即显示在终端。...使用setvbuf可以精确说明缓冲类型,这里是使用mode来说明,mode值包括以下几个 _IOFBF 全缓冲 _IOLBUF 行缓冲 _IONBUF 无缓冲 如果指定一个不带缓冲流,则忽略...然而有可能程序执行到后面,只是由于打印是行缓冲,导致部分打印没有出来,很可能就是你没有加上换行符打印而已。 这时候你可以设置为不带缓冲,或者关键位置fflush,或者打印记得加上换行符。...当然你还可以用GDBGDB调试入门,看这篇就够了!》 控制文件I/O内核缓冲 在某些情况下,我们可能需要强制将内核缓冲区内数据刷新至磁盘,而不必等待内核线程等待特定时间后才写入。

98920

GDB调试

如下示例 commands 1 slient printf “i is %d\n”, i end 在触发断点1时打印变量i值,slient是让GDB安静触发断点,不要打印一些没用信息。...backtrace [n]:backtrace(bt)命令打印当前调用栈信息,n为可选参数,既可以是整数也可以是负数,表示只打印栈顶上n层信息或栈底n层信息。...up [n]:向栈上面移动n层 down [n]:向栈下面移动n层 info frame:打印详细信息,主要以程序虚拟地址信息为主 info args:打印当前函数参数和对应值 info locals...:打印当前函数局部变量和对应值 查看源代码 在查看栈信息同时,你可能会对源代码感兴趣,以帮助你更好理解程序来龙去脉(如果你用是Emacs编辑器,这种需求就会大大减少,因为Emacs和GDB配合非常好...ptype,ptype会展开所有类型定义,whatis则不会 打印表达式: print [/] :print(p)打印命令有两部分,可选/表示输出格式

2.1K10

GDB调试指南-单步调试

在启动调试设置断点观察之后,没有我们想要信息怎么办呢?这个时候,就需要单步执行或者跳过当前断点继续执行等等。而本文所说单步调试并非仅仅指单步执行,而是指在你控制之下,按要求执行语句。...单步进入-step 对于上面的情况,如果我们想跟踪add函数内部情况,可以使用step命令(可简写为s),它可以单步跟踪到函数内部,但前提是该函数有调试信息并且有源码信息。...printf("it will calc a + b\n"); (gdb) s #单步进入,但是并没有该函数源文件信息 _IO_puts (str=0x4006b8 "it will...如果没有函数调用,s作用与n作用并无差别,仅仅是继续执行下一行。它后面也可以跟数字,表明要执行次数。 当然它还有一个选项,用来设置当遇到没有调试信息函数,s命令是否跳过该函数,而执行后面的。...值,上面可以带或不带该值,如果不带num,则针对所有skip,如果带上了,则只针对某一个skip。

2.7K20

Linux 编译安装 GCC 4.8

4.8.1开始全面支持C++11特性,并且脱离了ppl库,gdb也开始脱离ppl库了 编译安装 GCC 4.8.X 准备环境及依赖项 支持 ISO C++ 98 编译器(GCC 4.7.2 中期一个...gdbpretty-printer 用以友好打印stdc++stl容器 在执行 install.sh 脚本前安装 ncurses-devel 和 python-devel, 用于编译gdb和开启python...History: 2013-03-26 Created 2013-04-11 改进脚本,增加统一编译选项,增加对binutils和gdb可选包编译,增加自动把PREFIX_DIR...2013-12-13 更新binutils到2.24,更新gdb到7.6.2,移除对ppl依赖,显式开启gold等一些选项,显式开启链接时优化选项 2014-05-23 更新gcc...到4.8.3,更新gdb到7.7.1,完全移除对ppl依赖,同步gcc4.9编译脚本中修复一些问题,增加编译选项等 2015-02-09 更新gcc到4.8.4(未测试,貌似这个版本加入了

6.9K20
领券