用GDB查看c/c++内存对象模型

运行环境:ubuntu16 64位系统

示例代码:test.cpp

struct Base {
    Base() = default;
    ~Base() = default;
public:
    int a;
    int b;
};

int main() {
    Base base;
    base.a = 1;
    base.b = 2;

    return 0; 
}

编译: g++ test.cpp -g

完整的运行结果为:

 分步介绍如下:

1.启动及查看源码

gdb a.out

l(小写的字母L)

2.设置断点

break 11

3.开始运行

r

到达断点后停住

4.查看变量的值

p base

(gdb) p base
$1 = {a = -8448, b = 32767}

此时,base的成员变量还没有初始化,是两个随机值。

5.继续执行

n

执行完line13之后,再次查看base的值

(gdb) p base
$2 = {a = 1, b = 2}
(gdb) p &base
$3 = (Base *) 0x7fffffffde10

6.查看变量的类型

(gdb) ptype base
type = struct Base {
    int a;
    int b;
  public:
    Base(void);
    ~Base(int);
}

7.查看某个内存地址的数值

(gdb) x/8xb &base
0x7fffffffde10:    0x01    0x00    0x00    0x00    0x02    0x00    0x00    0x00

表示查看‘起始地址为&base的内存中的数值,

第一个x表示查看内存地址

8表示查看8个单位的内容

第二个x表示用十六进制显示

b表示每个单位为一个字节

a占用4个字节,0x01是低位的数据,存放在低地址,说明是小端的
(gdb) x/8xh 0x7fffffffde10
0x7fffffffde10:    0x0001    0x0000    0x0002    0x0000    0x7d00    0x4724    0xb581    0xb541

h表示每个单位为两个字节

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值