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.









  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值