天天看点

gdb中调试stl

原地址: http://blog.csdn.net/redsuntim/article/details/11976265

在Linux下用GDB调试STL很麻烦, 不像windows下那么方便, 偶然发现了这么一个神奇的方法, 分享给大家.

另外使用Linux下图形化调试工具: kdbg, Affinic介绍的Affinic软件可以很方便的在图形化界面下调试STL.

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

调试方法很简单: 打开 gdb, 在gdb中执行:

source ~/.gdbinit
           

如正常我使用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)   

 对于vector,queue同样也可以使用类似的方法.

继续阅读