gdb+linux+查看变量,gdb查看变量值
转贴地址
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查看变量值相关推荐
- Linux查询root环境变量,linux环境变量和查看方法
linux环境变量和查看方法 1. 显示环境变量HOME [root@localhost ~]# echo $HOME /root 2. 设置一个新的环境变量hello [root@localhost ...
- Python中变量名与变量值的关系
在Python中变量名与变量值的只是绑定关系如图,变量名只是一个标识符与变量值绑定在一起而已 转载于:https://www.cnblogs.com/liuxiaowei/p/7163470.html
- python字典键值对转化为相应的变量名和变量值
将python字典键值对转化为相应的变量名和变量值可以使用以下方法: globals().update({"name":"value"}) locals().u ...
- tensorflow 实现打印预训练的模型中的变量名和变量值
tensorflow保存的预训练的模型包含3个文件: model_name.data-00000-of-00001 (保存网络中每个变量值,包括所有的weights.biases.gradients等 ...
- gdb如何确定内存 已经释放_很经典的GDB调试命令,包括查看变量,查看内存
转载地址:http://www.cnblogs.com/rosesmall/archive/2012/04/12/2444431.html PS:如果想跟踪正在运行的进程可以: ps 查看进程id . ...
- 怎么对jdk核心包进行跟踪调试,并查看调试中的变量值
java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而却存在如下两个问题. a.debug时查看变量十分麻烦 ...
- 分类变量如何设置变量值的显示顺序
在做数据分析的时候,有时候分类变量值默认的排序不是我们想要的,需要调整显示顺序,pandas可以通过pd.Categorical来设置分类变量的显示顺序. 例如,对于数据分析教程常用的diamonds ...
- gdb调试 print打印不出变量值或者不准确
编译选项加了 -O,即便是-O0,也不能正常显示,需要加上-gstabs+这个编译选项, -gdwarf-2这个编译选项会与-gstabs+冲突,去掉-gstabs+,只保留-gdwarf-2选项可以 ...
- matlab中怎么查看变量,Matlab 查看内存中的变量,清空屏幕等命令
Matlab 查看内存中的变量,清空屏幕等命令 该文章讲述了Matlab 查看内存中的变量,清空屏幕等命令. 1. 查看内存中的变量 who whos 2. clc 清空屏幕 3. clf 清空当前的 ...
最新文章
- 高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布...
- 分布式事务中间件Fescar—全局写排它锁解读
- 构造类斐波那契数列矩阵
- 使用扩展技术将SAP Fiori应用隐藏动态创建的UI字段
- Mac电脑 + Windows机械键盘?功能键映射了解一下
- 数据库(mysql)基本语句操作
- 计算数组和以及平均值
- 6 大主流 Web 框架优缺点对比
- 200行Python代码实现的2048小游戏
- mysql 地理空间数据库_地理空间数据库
- 互动快报:从读报刊看性格
- 楚纳电动车禁入电梯管控系统-电梯阻车原理
- win10无限蓝屏_升级 Win10 后系统蓝屏或无限重启的解决方法之一
- 换皮后贴吧玩家反馈整理
- vue项目落地(qiankun.js)微前端服务
- 软件项目管理第4版课后习题[附解析]第六章
- [sdx62]使用diff工具给开源软件包dnsmasq打patch操作方法
- Struts Tiles 框架概述
- 【前端学习记录】Node.nodeType()
- css米奇,屹立48年不倒的IP,机械姬为什么能火这么多年?