转贴地址

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

print和它的显示格式

p /x var #十六进制显示变量。

p /d var #十进制显示变量。

p /u var #十六进制显示无符号变量。

p /o var #八进制格式显示变量。

p /t var #二进制格式显示变量。

p /a var #十六进制格式显示变量。

p /c var #字符格式显示变量。

p /f var #浮点数格式显示变量。

1

2

3

4

5

6

7

8

p/xvar#十六进制显示变量。

p/dvar#十进制显示变量。

p/uvar#十六进制显示无符号变量。

p/ovar#八进制格式显示变量。

p/tvar#二进制格式显示变量。

p/avar#十六进制格式显示变量。

p/cvar#字符格式显示变量。

p/fvar#浮点数格式显示变量。

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

(gdb) p 'file.c'::var

(gdb) p 'function'::var

1

2

(gdb)p'file.c'::var

(gdb)p'function'::var

查看数组中元素的值

(gdb) p *array@len #数组首地址,长度

(gdb) p array_name #静态数组可以直接打印名称

1

2

(gdb)p*array@len#数组首地址,长度

(gdb)parray_name#静态数组可以直接打印名称

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

#在Makefile中的CFLAGS中增加选项 -gstabs

CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Werror -g -gstabs

1

2

#在Makefile中的CFLAGS中增加选项 -gstabs

CFLAGS=-pipe-O-W-Wall-Wpointer-arith-Werror-g-gstabs

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

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

语法:x/n/u/f

n、u、f有着各自的含义,可以组合使用。n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。f

表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。u

表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字

节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

#从内存地址0x54320读

#h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示

(gdb) x/3uh 0x54320

1

2

3

#从内存地址0x54320读

#h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示

(gdb)x/3uh0x54320

自动显示选项display

(gdb) display/i $pc #显示源代码和汇编的对应关系

(gdb) undisplay #不要自动显示

(gdb) delete display #删除自动显示

(gdb) disable display #禁用自动显示

(gdb) enable display #启用自动显示

(gdb) info display #display设置的自动显示信息。

1

2

3

4

5

6

(gdb)display/i$pc#显示源代码和汇编的对应关系

(gdb)undisplay#不要自动显示

(gdb)deletedisplay#删除自动显示

(gdb)disabledisplay#禁用自动显示

(gdb)enabledisplay#启用自动显示

(gdb)infodisplay#display设置的自动显示信息。

其它设置显示选项

set print address on #打开地址输出

set print array on #打开数组优化显示

set print elements #数据显示最大长度

set print null-stop #显示字符串直到遇到结束符

set print pretty on #显示漂亮的结构体

set print sevenbit-strings #字符串或字符数据按\nnn显示

set print union #显示结构体内的联合体数据

#注明:使用 show print xxx 可以查看当前设置

1

2

3

4

5

6

7

8

setprintaddresson#打开地址输出

setprintarrayon#打开数组优化显示

setprintelements#数据显示最大长度

setprintnull-stop#显示字符串直到遇到结束符

setprintprettyon#显示漂亮的结构体

setprintsevenbit-strings#字符串或字符数据按\nnn显示

setprintunion#显示结构体内的联合体数据

#注明:使用 show print xxx 可以查看当前设置

历史记录

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

gdb环境变量

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

set $foo = *object_ptr

1

set$foo=*object_ptr

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

(gdb) show convenience #查看当前所设置的所有的环境变量。

1

(gdb)showconvenience#查看当前所设置的所有的环境变量。

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

(gdb) set $i = 0

(gdb) print bar[$i++]->contents

1

2

(gdb)set$i=0

(gdb)printbar[$i++]->contents

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

gdb+linux+查看变量,gdb查看变量值相关推荐

  1. Linux查询root环境变量,linux环境变量和查看方法

    linux环境变量和查看方法 1. 显示环境变量HOME [root@localhost ~]# echo $HOME /root 2. 设置一个新的环境变量hello [root@localhost ...

  2. Python中变量名与变量值的关系

    在Python中变量名与变量值的只是绑定关系如图,变量名只是一个标识符与变量值绑定在一起而已 转载于:https://www.cnblogs.com/liuxiaowei/p/7163470.html

  3. python字典键值对转化为相应的变量名和变量值

    将python字典键值对转化为相应的变量名和变量值可以使用以下方法: globals().update({"name":"value"}) locals().u ...

  4. tensorflow 实现打印预训练的模型中的变量名和变量值

    tensorflow保存的预训练的模型包含3个文件: model_name.data-00000-of-00001 (保存网络中每个变量值,包括所有的weights.biases.gradients等 ...

  5. gdb如何确定内存 已经释放_很经典的GDB调试命令,包括查看变量,查看内存

    转载地址:http://www.cnblogs.com/rosesmall/archive/2012/04/12/2444431.html PS:如果想跟踪正在运行的进程可以: ps 查看进程id . ...

  6. 怎么对jdk核心包进行跟踪调试,并查看调试中的变量值

    java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而却存在如下两个问题. a.debug时查看变量十分麻烦 ...

  7. 分类变量如何设置变量值的显示顺序

    在做数据分析的时候,有时候分类变量值默认的排序不是我们想要的,需要调整显示顺序,pandas可以通过pd.Categorical来设置分类变量的显示顺序. 例如,对于数据分析教程常用的diamonds ...

  8. gdb调试 print打印不出变量值或者不准确

    编译选项加了 -O,即便是-O0,也不能正常显示,需要加上-gstabs+这个编译选项, -gdwarf-2这个编译选项会与-gstabs+冲突,去掉-gstabs+,只保留-gdwarf-2选项可以 ...

  9. matlab中怎么查看变量,Matlab 查看内存中的变量,清空屏幕等命令

    Matlab 查看内存中的变量,清空屏幕等命令 该文章讲述了Matlab 查看内存中的变量,清空屏幕等命令. 1. 查看内存中的变量 who whos 2. clc 清空屏幕 3. clf 清空当前的 ...

最新文章

  1. 高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布...
  2. 分布式事务中间件Fescar—全局写排它锁解读
  3. 构造类斐波那契数列矩阵
  4. 使用扩展技术将SAP Fiori应用隐藏动态创建的UI字段
  5. Mac电脑 + Windows机械键盘?功能键映射了解一下
  6. 数据库(mysql)基本语句操作
  7. 计算数组和以及平均值
  8. 6 大主流 Web 框架优缺点对比
  9. 200行Python代码实现的2048小游戏
  10. mysql 地理空间数据库_地理空间数据库
  11. 互动快报:从读报刊看性格
  12. 楚纳电动车禁入电梯管控系统-电梯阻车原理
  13. win10无限蓝屏_升级 Win10 后系统蓝屏或无限重启的解决方法之一
  14. 换皮后贴吧玩家反馈整理
  15. vue项目落地(qiankun.js)微前端服务
  16. 软件项目管理第4版课后习题[附解析]第六章
  17. [sdx62]使用diff工具给开源软件包dnsmasq打patch操作方法
  18. Struts Tiles 框架概述
  19. 【前端学习记录】Node.nodeType()
  20. css米奇,屹立48年不倒的IP,机械姬为什么能火这么多年?

热门文章

  1. mysql 主动拿锁_主动锁模
  2. visual c++ 棋牌类游戏编程实例
  3. 前端 Html 介绍
  4. 车载摄像头模组金属镜座与镜头结构粘接用胶方案
  5. 微软专家教你,如何搞定树莓派 AI 服务开发
  6. php递归实现sum函数,php递归函数三种实现方法及如何实现数字累加
  7. 垃圾箱清空的文件怎么恢复,怎么恢复回收站清空的文件
  8. 【文档】AOA-with-DW1000_V1.1
  9. struts2 lebel标签失效问题
  10. 全球与中国Autodesk渠道合作伙伴市场现状及未来发展趋势