gdb打印字符串长度设置

在使用gdb调试过程中,经常需要查看变量的值,最常用的方法:

(gdb) print {变量名}

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

例如:

(gdb) p (char*)0x23b744a98
$19 = 0x23b744a98 "obbs:S:1.3:{[{1,772830,772830,35513000054164,45514000069401,0,0,15525034,1,7778,-1,0,0,1,1,[{1,7,7,9005,-41600,10402},{1,7,7,9006,-41600,10402},{1,7,7,4002,-1,10402},{1,7,7,4005,17400,10402},{1,7,7,40"...
可以看到print显示的内容最后为"..."表示显示的内容并不完整。


问题:

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


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

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

通过以下命令可以查看:

(gdb) show print elements
Limit on string chars or array elements to print is 200.
可以看到默认只会打印200个字符。这个可以通过前面的举例验证。

obbs:S:1.3:{[{1,772830,772830,35513000054164,45514000069401,0,0,15525034,1,7778,-1,0,0,1,1,[{1,7,7,9005,-41600,10402},{1,7,7,9006,-41600,10402},{1,7,7,4002,-1,10402},{1,7,7,4005,17400,10402},{1,7,7,40
刚好是200个字符。


其次,如何更改打印的字符串长度值?

可以通过命令:

(gdb) set print elements 0
(gdb) show print elements 
Limit on string chars or array elements to print is unlimited.
使打印的字符串长度不受限制。当然这里你也可以设置一个你需要的合理值。

例如:

(gdb) set print elements 300
(gdb) show print elements
Limit on string chars or array elements to print is 300.

验证:再次打印前面例子中未完全显示的变量:

(gdb) p (char*)0x23b744a98
$30 = 0x23b744a98 "obbs:S:1.3:{[{1,772830,772830,35513000054164,45514000069401,0,0,15525034,1,7778,-1,0,0,1,1,[{1,7,7,9005,-41600,10402},{1,7,7,9006,-41600,10402},{1,7,7,4002,-1,10402},{1,7,7,4005,17400,10402},{1,7,7,4006,-41600,10402},{1,7,7,4007,0,-1},{1,7,7,4015,17400,10402}]}]}"

OK.这次打印已经能显示整个字符串所有内容。


总结:

使用set print elements [n] 来更改打印字符串的长度。



参考:

(gdb) help set print elements
Set limit on string chars or array elements to print.
"set print elements 0" causes there to be no limit.









评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值