前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gdb调试容器和命令保存

gdb调试容器和命令保存

原创
作者头像
mariolu
发布2021-08-30 22:16:56
1.8K0
发布2021-08-30 22:16:56
举报

一、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

有了这些宏,就可以打印出响应的容器

代码语言:javascript
复制
wget http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt
cat dbinit_stl_views-1.03.txt >> ~/.gdbinit

代码语言:javascript
复制
#       std::vector<T> -- via pvector command
#       std::list<T> -- via plist or plist_member command
#       std::map<T,T> -- via pmap or pmap_member command
#       std::multimap<T,T> -- via pmap or pmap_member command
#       std::set<T> -- via pset command
#       std::multiset<T> -- via pset command
#       std::deque<T> -- via pdequeue command
#       std::stack<T> -- via pstack command
#       std::queue<T> -- via pqueue command
#       std::priority_queue<T> -- via ppqueue command
#       std::bitset<n> -- via pbitset command
#       std::string -- via pstring command
#       std::widestring -- via pwstring command

我们可以把这些放入到~/.gdbinit文件中。在gdb调试的时候,使用source ~/.gdbinit加载这些宏操作。

如果你的gdb在运行当中,需要重启启用下,这些宏才生效。

阅读这些代码宏,也可以帮助你理解stl结构。

顺带说下,在~/.gdbinit可以放入你常用的一些gdb设置命令。比如说

代码语言:javascript
复制
set print elements 0  //设置打印全部元素
set print pretty on  //打印结构体格式更直观
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off

二、gdb调试历史保存

还有一个比较有用的是保存gdb调试历史,set history save on 一个相关的命令是set history remove-duplicates <count>. 该命令是“控制删除命令历史列表中重复的历史条目。如果计数不为零,gdb 将回顾最后计数的历史条目并删除与当前条目重复的第一个条目。添加到命令历史列表中。如果计数是无限制的,那么此后视是无界的。如果计数为 0,则禁用重复历史条目的删除"。 set history remove-duplicates <count> 默认情况下,gdb 将历史记录保存到当前目录的./.gdb_history 文件中。如果希望命令历史记录不依赖于所在的目录,需要包含: set history filename ~/.gdb_history

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、gdb调试容器或者智能指针的内容
  • 二、gdb调试历史保存
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档