在使用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.

gdb打印完整字符串內容
在使用gdb進行程序調試時,經常遇到打印字符串內容的情況。但是很遺憾,缺省情況下,當待顯示的字符串比較長時,gdb只會顯示部分字符串內容,給程序的調試帶來不便。
通過如下命令可以實現gdb中打印完整字符串內容:
set print element 0

Here is an example. If a program says

int *array = (int *) malloc (len * sizeof (int));

you can print the contents of array with
p *array@len


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM