gdb test

gdb test

b main
b 8
b hello.cpp:9
b hello.cpp:add
tb 9
r (可以带参数)
c
n
s


bt


info b
info local
info args
info display
l
l hello.cpp:9




显示 表达式
显示 变量
p i
print/x i
print/x file::variable
print/x function::variable
如果是数组如:
int *arry = (int*)malloc(len *sizeof(int));
p *arry@len  //len是数组长度
$1 = {2,3,5,9}
静态数组,直接print 数组名


数据显示格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。


查看内存
你可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:
x/
n、f、u是可选的参数。
n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
表示一个内存地址。
n/f/u三个参数可以一起使用。例如:
命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。


display i
undisplay
delete display
disable display
enable display




(gdb) print {变量名}


一般情况下,打印并不存在问题。但当一个字符串比较长时,打印出来的内容不完整,内容的最后为"..."
可以看到print显示的内容最后为"..."表示显示的内容并不完整。
问题:


那如何才能将长字符串显示完整呢?如果字符串比较长,又是依据什么来显示字符串呢?




首先,猜测打印的是一个固定长度的字符串,如果超过了默认的最大长度,那只打印默认最大长度的字符串内容,并在其后显示"..."表示打印内容不完整。


那这里的默认最大长度是多少呢?


通过以下命令可以查看:


(gdb) show print elements  
Limit on string chars or array elements to print is 200.  
可以看到默认只会打印200个字符。这个可以通过前面的举例验证。
其次,如何更改打印的字符串长度值?


可以通过命令:


(gdb) set print elements 0  
(gdb) show print elements   
Limit on string chars or array elements to print is unlimited.  
使打印的字符串长度不受限制。当然这里你也可以设置一个你需要的合理值
使用set print elements [n] 来更改打印字符串的长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值