S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

配置GDB以支持查看stl容器数据

Posted on 2010-12-24 22:22 S.l.e!ep.¢% 阅读(874) 评论(0)  编辑 收藏 引用 所属分类: Unix
[转]配置GDB以支持查看stl容器数据
2009-09-08 10:04
http://blog.chinaunix.net/u1/44543/showart_1953788.html

 
2. #cat dbinit_stl_views-1.03.txt >> ~/.gdbinit
 
3. 若正处于gdb中,运行命令:
   (gdb) source ~/.gdbinit
 
4. 例如,如下代码:
bugging.cpp

#include<vector>
usingnamespacestd;

int main()
{
vector<int> vec;
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
return 0;
}

 
编译:
 

#g++-o bugging -g bugging.cpp

gdb调试:

# gdb bugging
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and"show warranty"for details.
This GDB was configured as "i486-slackware-linux"...
(gdb) help pvector
Prints std::vector<T> information.
Syntax: pvector <vector><idx1><idx2>
Note: idx, idx1 and idx2 must be in acceptable range [0..<vector>.size()-1].
Examples:
pvector v - Prints vector content, size, capacity and T typedef
pvector v 0 - Prints element[idx] from vector
pvector v 1 2 - Prints elements in range [idx1..idx2] from vector
(gdb)break main
Breakpoint 1 at 0x80485c6:file bugging.cpp,line 6.
(gdb) run
Starting program:/root/learn/c++/bugging

Breakpoint 1, main () at bugging.cpp:6
6        vector<int> vec;
(gdb) n
7        vec.push_back(2);
(gdb)
8        vec.push_back(3);
(gdb) pvector
Prints std::vector<T> information.
Syntax: pvector <vector><idx1><idx2>
Note: idx, idx1 and idx2 must be in acceptable range [0..<vector>.size()-1].
Examples:
pvector v - Prints vector content, size, capacity and T typedef
pvector v 0 - Prints element[idx] from vector
pvector v 1 2 - Prints elements in range [idx1..idx2] from vector
(gdb) pvector vec
elem[0]: $1 = 2
Vector size = 1
Vector capacity = 1
Element type =int*
(gdb) n
9        vec.push_back(4);
(gdb)
10        return 0;
(gdb) pvector vec
elem[0]: $2 = 2
elem[1]: $3 = 3
elem[2]: $4 = 4
Vector size = 3
Vector capacity = 4
Element type =int*
(gdb)

5. 默认情况下gdb不能用[]查看stl容器的数据元素,提示如下错误:

(gdb) print vec[0]
One of the arguments you tried to pass to operator[] could not be converted to what the function wants.


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理