Dev-C++中调用gdb
进行程序调试时我们可以看到调试框内有“ 发送命令到GDB ”这一项, 在此中输入命令,然后按回车即可调用GDB命令 。
Dev-C++中利用gdb查看内存地址中的值
- 命令格式为
x/nfu <addr>
其中n,f,u为可选参数,为对应的内存地址
下面介绍这三个参数的作用
参数n-需要显示的内存单元个数
也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义
参数f-显示格式
有时候我们希望数据内容以不同格式呈现,如2进制,16进制,修改f参数可以调整
x(hex)———————-按十六进制格式显示变量。
d(decimal)—————–按十进制格式显示变量。
u(unsigned decimal)—–按十进制格式显示无符号整型。
o(octal) ——————–按八进制格式显示变量。
t(binary)——————-按二进制格式显示变量。
a(address)—————–按十六进制格式显示变量。
c(char)———————按字符格式显示变量。
f(float) ——————–按浮点数格式显示变量
参数u-每个单元的大小,按字节数来计算
默认是4 bytes,GDB会从指定内存地址开始读取指定字节,并把其当作一个值取出来,并使用格式f来显示
b: 1byte
h: 2 bytes
w: 4 bytes
g:8 bytes
表达式可以是当前程序的const常量,变量,函数等内容,但是GDB不能使用程序中所定义的宏
举例使用
下面为示例代码,并在第5行处添加断点
#include<stdio.h>
int main()
{
float d;
d=8.25;
return 0;
}
在发送命令到GDB中输入如下代码
x/4xb &d
4代表输出4个内存单元
x代表以十六进制形式输出
b代表每个单元大小1个字节
输出内容如下
->->post-prompt
0x70fe1c: 0x00 0x00 0x04 0x41
则取得了变量d所在内存单元的十六进制数据