gdb中查看stl容器内容

GDB中print方法并不能直接打印STL容器中保存的变量,其实只要http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt这个文件保存为~/.gdbinit  就可以使用它提供的方法方便调试容器


 容器类型GDB 命令
std::vector<T>pvector stl_variable
std::list<T>plist stl_variable T
std::map<T,T>pmap stl_variable
std::multimap<T,T>pmap stl_variable
std::set<T>pset stl_variable T
std::multiset<T>pset stl_variable
std::deque<T>pdequeue stl_variable
std::stack<T>pstack stl_variable
std::queue<T>pqueue stl_variable
std::priority_queue<T>ppqueue stl_variable
std::bitset<n><td>pbitset stl_variable
std::stringpstring stl_variable
std::widestringpwstring stl_variable

举例:

如果你的C++代码中有定义: set<string> s;
则在GDB中可以使用如下命令查看该set的信息与内容:
pset s - 打印该集合s的定义和大小
pset s char* - 打印该集合s的大小以及该集合的所有元素



 

[c-sharp] view plain copy
  1. Data type   GDB command  
  2. std::vector<T>    pvector stl_variable  
  3. std::list<T>  plist stl_variable T  
  4. std::map<T,T> pmap stl_variable  
  5. std::multimap<T,T>    pmap stl_variable  
  6. std::set<T>   pset stl_variable T  
  7. std::multiset<T>  pset stl_variable  
  8. std::deque<T> pdequeue stl_variable  
  9. std::stack<T> pstack stl_variable  
  10. std::queue<T> pqueue stl_variable  
  11. std::priority_queue<T>    ppqueue stl_variable  
  12. std::bitset<n>td>  pbitset stl_variable  
  13. std::string pstring stl_variable  
  14. std::widestring pwstring stl_variable  
 

 

如正常我使用GDB自带的print打印一个STL list容器变量list

[xhtml] view plain copy
  1. (gdb) p lst  
  2. $4 = {  
  3.   <std::_List_base<int, std::allocator<int> >> = {  
  4.     _M_impl = {  
  5.       <std::allocator<std::_List_node<int> >> = {  
  6.         <__gnu_cxx::new_allocator<std::_List_node<int> >> = {<No data fields>}, <No data fields>},   
  7.       members of std::_List_base<int, std::allocator<int> >::_List_impl:   
  8.       _M_node = {  
  9.         _M_next = 0x804d008,   
  10.         _M_prev = 0x804d048  
  11.       }  
  12.     }  
  13.   }, <No data fields>}  
 

 

现在我使用这个脚本提供的plist方法打印

[c-sharp] view plain copy
  1. (gdb) plist lst  
  2. List size = 5   
  3. List type = std::list<int, std::allocator<int> >  
  4. Use plist <variable_name> <element_type> to see the elements in the list.  
  5. (gdb)  
 

详细查看list中的元素信息

[c-sharp] view plain copy
  1. (gdb) plist lst int  
  2. elem[0]: $5 = 7  
  3. elem[1]: $6 = 1  
  4. elem[2]: $7 = 5  
  5. elem[3]: $8 = 9  
  6. elem[4]: $9 = 2  
  7. List size = 5   
  8. (gdb)   
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值