【快速学】Dev C++查看内存中的值
开始调试后,在Send command to GDB框里输入GDB指令
1、获得a在内存中的地址
print /x &a
2、查看内存中的值
可以看到a在内存中的地址为0x62fe1c
输入指令x /32db 0x62fe1c
查看a在内存中的值。
x /32db 0x62fe1c
表示以地址0x62fe1c为起始地址,返回32个单元的值,输出格式为有符号十进制整数,每个单元有1个字节。
可看到内存0x62fe1c处存储的值为10
分析:
第一行地址为0x62fe1c,第二行地址为0x62fe24
0x62fe24-0x62fe1c=0x000008,算出一行数据共8个字节,
可看到每行刚好有8个数,说明每个数是一个字节
a是int类型,故a应该占4个字节的位置,从图中看出低字节在前面,说明是小端存储,真正的顺序应该是0 0 0 10(十进制)
第一行有-96这样的数,故猜测此处显示的十进制数是将1字节数据当作有符号整数转换为十进制得到的
3、验证分析:
令int a=-2,a的补码是1111 1111 1111 1111 1111 1111 1111 1110
十六进制:0xfffffffe,小端存储:fe ff ff ff
小端存储(十进制,有符号):-2 -1 -1 -1
从图中可看到,试验结果与我们的推导相符合,验证成功
4、16进制显示
一般使用16进制显示内存中的值,
可将命令改为x /32xb 0x62fe1c
,表示以地址0x62fe1c为起始地址,返回32个单元的值,输出格式为按十六进制格式显示无符号整型,每个单元有1个字节。
5、详细指令
GDB命令 x
功能:查看内存地址中的值
格式:x/<n/f/u> <addr>
解释:以addr为起始地址,返回n个单元的值,输出格式是f,每个单元大小为u个字节。
--------------------------------------------------------------
例:32bu第一位是32,第二位是b,第三位是u
指令 x /32bu 0x62fe1c 标红加粗部分的格式:
第1位(返回几个单元的值) | 第2位(显示格式) | 第3位(每个单元由几个字节组成) | |||
空 | 返回1个单元的值 | 空 | 默认为有符号十进制整数 | 空 | 默认为4 Bytes |
3 | 返回3个单元的值 | x | 按十六进制格式显示变量。 | b | 1 Byte |
32 | 返回32个单元的值 | d | 按有符号十进制格式显示变量。 | h | 2 Bytes |
n | 返回n个单元的值 | u | 按十六进制格式显示无符号整型。 | w | 4 Bytes |
o | 按八进制格式显示变量。 | g | 8 Bytes | ||
t | 按二进制格式显示变量。 | ||||
a | 按十六进制格式显示变量。 | ||||
c | 按字符格式显示变量。 | ||||
f | 按浮点数格式显示变量。 |
6、指令的缺省使用
建议不要省略,该写啥写啥。
虽然有默认输出格式,但使用其他格式(如十六进制)后,缺省的默认输出格式就会变为刚才使用的(十六进制)
默认格式:x / 0x62fe1c
,表示以地址0x62fe1c为起始地址,返回1个单元的值,输出格式为有符号十进制整数,每个单元有4个字节。
6.1 实验发现第三位可省略,一个单元默认是4个字节
6.2 实验发现第一位可省略,默认输出一个单元
6.3 实验发现第二位可省略,默认输出十进制整数
参考:
GDB官方文档:https://www.sourceware.org/gdb/documentation/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了