尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

GDB调试变量、内存与寄存器查看与修改 _

GDB调试变量、内存与寄存器查看与修改 _
📅 发布时间:2026/6/29 4:11:07

变量查看与修改

在使用 GDB 调试程序时,除了控制程序的运行流程以外,最常见的操作就是查看变量的值、查看参数的值,以及在调试过程中临时修改某些变量的值。通过这些命令,可以观察程序运行时的数据变化,从而判断程序逻辑是否符合预期。

1.1 查看函数参数

使用info args(i args)命令可以查看当前函数传入参数的值,包括main函数的argv与argc参数。

i args

例如,当前程序停在某个函数内部:

void test(int a, int b) { int sum = a + b; }

在断点处执行:

i args

就可以看见传入的a和b变量的值

除了使用i args,也可以直接使用print(p)命令打印某个参数的值:

p a p b

1.2 查看变量

1、查看普通变量

在 GDB 中,可以使用print命令查看变量的值,print可以简写为p。

p [变量名]

例如:

p num p ch

默认情况下,p命令会按照变量本身的类型打印结果。如果想按照不同格式查看变量,可以在p后面加格式控制。

常见格式如下:

命令含义
p/d var按十进制打印
p/x var按十六进制打印
p/t var按二进制打印
p/o var按八进制打印
p/c var按字符打印
p/s var按字符串打印

例如:

p/d num p/x num p/t num p/c ch

如果有如下代码:

int num = 65; char ch = 'A';

执行:

p/d num p/x num p/c num

可能得到:

$1 = 65 $2 = 0x41 $3 = 65 'A'

这样可以方便地从不同角度查看变量的值。


2、查看变量类型

如果想查看变量的类型,可以使用如下命令:

ptype [变量名]

ptype显示的信息详细,适合查看结构体、指针、数组等复杂类型。

例如,有如下结构体定义:

struct Student { char name[32]; int age; }; struct Student stu = {"Tom", 18}; struct Student *pstu = &stu;

在 GDB 中可以执行:

ptype stu

可能得到:

type = struct Student { char name[32]; int age; }

这说明变量stu的类型是struct Student,并且 GDB 会把结构体中的成员也显示出来。

如果查看结构体指针变量:

ptype pstu

可能得到:

type = struct Student *

这说明pstu是一个指向struct Student类型的指针。

如果想查看指针指向的对象类型,也可以对指针解引用后再查看:

ptype *pstu

可能得到:

type = struct Student { char name[32]; int age; }

在调试结构体、链表、树、数组指针等复杂数据结构时,ptype非常有用,可以帮助我们快速确认变量的数据类型以及内部成员组成。

whatis命令可以用来查看结构体,类,派生类,普通函数以及类成员函数
ptype命令可以更加详细的查看这些内容,如果显示一个类,ptype会把类的成员变量和成员函数都显示出来i variables`命令用来查看全局变量或者静态变量,比如我们看见一个变量使用,但是不知道该变量是在哪定义的,就可以使用这个命令

ptype /m //只显示成员变量,不显示成员函数 ptype /t //不现实typedef的内容 ptype /o //显示结构体或者类的内存构造以及大小

例如如果我们对结构体占用内存大小进行优化,可以使用ptype命令对结构体进行查看,查看他对内存空间的利用率

(gdb) ptype /o node /* offset | size */ type = struct NODE { /* 0 | 4 */ int ID; /* 4 | 4 */ int age; /* 8 | 1 */ char gender; /* XXX 7-byte hole */ /* 16 | 8 */ NODE *next; /* 24 | 4 */ int test; /* 28 | 1 */ char c; /* XXX 3-byte padding */ /* total size (bytes): 32 */ }

可以看见对于上面的结构体,所有成员直接加起来才22个字节,但是使用不合理的排布之后,会用32个字节才能存下,调整结构体之后,可以优化内存布局到24个字节

(gdb) ptype /o node2 /* offset | size */ type = struct NODE2 { /* 0 | 4 */ int ID; /* 4 | 4 */ int age; /* 8 | 8 */ NODE *next; /* 16 | 4 */ int test; /* 20 | 1 */ char gender; /* 21 | 1 */ char c; /* XXX 2-byte padding */ /* total size (bytes): 24 */ }

相关新闻

  • 终极NES模拟器Mesen完整指南:免费开源带你重回8位游戏黄金时代
  • WSaiOS:一种用于AI语言语义模拟的确定性-概率混合架构
  • 终极网盘直链下载助手:一键获取8大网盘真实下载地址的免费解决方案

最新新闻

  • API密钥安全管理:从环境变量到分层防御的5个关键实践
  • GModPatchTool:一键修复Garry‘s Mod跨平台故障的开源神器
  • 终极跨平台串口调试工具COMTool:一站式嵌入式开发解决方案
  • AI时代领导力适配:数据科学协作的四大失配与实操校准
  • 瑞萨RA8D2 ADC16H虚拟通道配置与高精度数据采集实战
  • 3步打造智能媒体库:MetaTube插件让Jellyfin/Emby影片管理自动化

日新闻

  • ENVI5.3.1实战:基于Landsat 8影像的区域无缝镶嵌与精准裁剪
  • 3步完成HS2-HF Patch安装:新手快速打造完美HoneySelect2体验
  • 微信好友检测终极指南:3分钟发现谁已悄悄删除你

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号