GDB 查看、修改变量

本文介绍了GDB调试器中的一些实用命令,如infoargs用于查看函数参数,setprintnull-stop可控制无效字符显示,setprintpretty使结构体更清晰,setprintarryon确保数组元素独占一行,psizeof和pstrlen分别用于获取变量大小和字符串长度,且强调了在GDB中需使用p进行操作,此外还提到了如何通过p变量名称=变量值来修改变量的值。

1、info args : 查看函数的入参内容

 2、set print null-stop :遇到无效的字符就不显示出来了

 3、set print pretty :让结构体以定义的形式展示出来,一个字段一行

4、 set print arry on :让数组中的元素每个占一行显示

5、 p sizeof(xxx) : 查看xxx的大小,注意不能直接sizeof(),必须加p

      p strlen(xxx) : 产看字符串xxx的长度,注意不能直接strlen,必须加p

 

 6、p 变量名称 = 变量值:  修改变量的值

<think> 我们正在讨论如何用GDB修改变量。根据引用[1]和[2],有两种主要方式:修改已有变量和定义自定义变量。 首先,修改已有变量: - 使用`set var variable_name = expression`或简写`set variable_name = expression`来修改一个已经存在的变量。例如:`set x = 10`。 - 注意:如果变量名与GDB命令冲突,必须使用`set var`来区分。 其次,定义自定义变量(也称为便利变量): - 便利变量以`$`开头,例如`$myvar`。 - 使用`set $myvar = expression`来定义并赋值。 - 便利变量不需要事先声明,赋值即创建。 另外,引用[2]还提到了一些查看变量的方法,如`print`和`p`,以及设置显示选项。 根据用户问题,他主要关注修改变量的方法,因此我们重点介绍修改已有变量和自定义变量的使用。 同时,注意引用[3]提到了一个关于全局变量被多次析构的问题,这可能是在修改全局变量时需要注意的,但用户当前问题不涉及此细节,因此我们只作为潜在注意事项提及。 因此,回答将分为两个部分:修改已有变量和定义自定义变量,并给出示例。 </think> ### 如何在GDB修改变量GDB调试器中修改变量有两种主要方式,具体操作如下: #### 1. 修改已存在的变量 使用`set var`命令修改调试程序中已定义的变量: ```bash (gdb) set var variable_name = new_value ``` **示例**: ```bash (gdb) set var counter = 0 # 修改整型变量 (gdb) set var *ptr = 100 # 修改指针指向的值 (gdb) set var arr[2] = 3.14 # 修改数组元素 ``` **注意**: - 变量必须已在当前作用域存在(否则报错) - 支持表达式如`set var x = y + z` - 可省略`var`简写为`set x=5`(除非与GDB命令冲突)[^1][^2] #### 2. 创建自定义变量(便利变量) 使用`$`前缀创建临时存储的变量: ```bash (gdb) set $myvar = expression ``` **示例**: ```bash (gdb) set $tmp = malloc_stats # 存储函数返回值 (gdb) set $counter = 0 # 自定义计数器 (gdb) p $tmp * 2 # 使用自定义变量计算 ``` **特点**: - 以`$`开头(如`$myvar`) - 不依赖程序作用域 - 调试会话中持续存在 - 常用于存储中间计算结果或调试状态[^1] #### 辅助命令 ```bash (gdb) print variable # 查看变量当前值 (gdb) info args # 查看函数参数 (gdb) set print pretty on # 优化结构体显示 (gdb) p sizeof(data) # 使用内嵌函数[^2] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值