运行环境: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表示每个单位为两个字节