gdb 調試列印完整字串

來源:互聯網
上載者:User

在使用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 elementsLimit 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 elementsLimit 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 elementsSet 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.