Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1070998
  • 博文数量: 132
  • 博客积分: 612
  • 博客等级: 中士
  • 技术积分: 1389
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-14 16:06
文章分类

全部博文(132)

文章存档

2015年(2)

2014年(55)

2013年(53)

2012年(2)

2011年(20)

分类: LINUX

2014-04-22 10:44:26

转贴地址
gdb调试过程中如何查看变量的值?一般说来使用print(p)指令来实现,并有自己很多的输出格式。

print和它的显示格式

查看文件中或者函数中的变量

查看数组中元素的值

如果出现了类似 “value has been optimized out” 的字样,表示该变量已经被自动优化了,也就是无法看到。因此gcc在优化的时候很可能会増删改查你的代码。取消自动优化,如下:

这样重新编译一下就可以了。

使用examine命令查看内存中的数据

语法:x/n/u/f

n、u、f有着各自的含义,可以组合使用。n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

自动显示选项display

 其它设置显示选项

历史记录

你可以直接使用 p $2 来显示第二个print的变量,而不必输入 p var-name。

gdb环境变量

你可以在GDB的调试环境中定义自己的变量,用来保存一些调试程序中的运行数据。使用set命令即可,如:

使用环境变量时,GDB会在你第一次使用时创建这个变量,而在以后的使用中,则直接对其赋值。环境变量没有类型,你可以给环境变量定义任一的类型。包括结构体和数组。

这是一个比较强大的功能,环境变量和程序变量的交互使用,将使得程序调试更为灵活便捷。例如:

于是,当你就不必,print bar[0]->contents, print bar[1]->contents地输入命令了。输入这样的命令后,只用敲回车,重复执行上一条语句,环境变量会自动累加,从而完成逐个输出的功能。

阅读(4771) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~