GDB的自定义命令非常有用,通过自定义命令,直接操作容器中的数据,可以方便的查看STL容器中的数据。
这个链接
dbinit_stl_views
是
Dan C Marinescu
写的查看STL容器的自定义命令(如果不适合你的STL版本的话,可以自行修改)。把它添加到你的.gdbinit中,就可以方便的查看STL容器了。它提供了查看vector,list,map,multimap,set,multiset,deque,stack,queue,priority_queue,bitset,string,widestring等对象的方法,非常好用!
1. 下载
http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt
2. #cat dbinit_stl_views-1.03.txt >> ~/.gdbinit
3. 若正处于gdb中,运行命令:
(gdb) source ~/.gdbinit
4. 例如,如下代码:
bugging.cpp
-
#include <vector>
-
using
namespace
std;
-
-
int
main()
-
{
-
vector<
int
> vec;
-
vec.push_back(2);
-
vec.push_back(3);
-
vec.push_back(4);
-
return
0;
-
}
5. 默认情况下gdb不能用[]查看stl容器的数据元素,提示如下错误:
一些常用内置的命令
Data type GDB command
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::string pstring stl_variable
std::widestring pwstring stl_variable
dbinit_stl_views-1.03.txt
下载地址 :
http://download.csdn.net/detail/dearwind153/9562875
转自:
http://blog.csdn.net/blade2001/article/details/5290329
之前一直不知道
数据类型
的长度是如何被存到系统中的,现在找到了,原来是在regcache.c文件中。
regcache.c文件,init_regcache_descr (struct
gdb
arch *
gdb
arch)
初始化寄存器描述信息。
初始化了
类型
的长度等信息
long offset = 0;
descr->sizeof_register
有的
gdb
版本不支持
打印
map
等stl,因此需要插件,在网上找到一个插件,进入
gdb
,source该文件即可。之后通过p
map
(p
vector
等)可以获取
打印
map
的提示,下面是工具代码,保存下,方便以后使用。
# ...
转载自:http://blog.chinaunix.net/uid-20594049-id-1620139.html
1. 下载 http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt
2. #cat dbinit_stl_views-1.03.txt >> ~/.
gdb
init
3. 若正处于
gdb
中,运行命...
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,
GDB
和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现
GDB
这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化...
<br />(
gdb
) show architecture
The target architecture is set automatically (currently i386)
(
gdb
) p sizeof(void *)
$1 = 4
(
gdb
) set architecture
Requires an argument. Valid arguments are i386, i386:x86-64, i8086, i386:intel, i386:x86-64:intel, auto.
Linux
gdb
调试如何print变量的地址
其实也没有啥别的,但是网络上很多的帖子都文不对题,这里自己调试了几遍发现其实只要按照c语言编程的思路把变量前面加上一个取地址符,就可以输出相应的地址了,和你print的格式并无多少关系。。很多网络上都给出来的结果都是把print的结果改成十六进制而已,我都差点被骗了。。
经年时令: