2023學年完整公開課版GDB數(shù)據(jù)命令_第1頁
2023學年完整公開課版GDB數(shù)據(jù)命令_第2頁
2023學年完整公開課版GDB數(shù)據(jù)命令_第3頁
2023學年完整公開課版GDB數(shù)據(jù)命令_第4頁
2023學年完整公開課版GDB數(shù)據(jù)命令_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

GDB數(shù)據(jù)命令*CONTENTSPAGE目錄頁1概述程序變量數(shù)據(jù)顯示數(shù)組變量數(shù)據(jù)顯示23目錄數(shù)據(jù)命令輸出格式4內(nèi)存數(shù)據(jù)查看5GDB數(shù)據(jù)命令1、概述在GDB中有非常豐富的數(shù)據(jù)顯示相關(guān)的命令,這些命令使得用戶可以以各種形式顯示所要查看的數(shù)據(jù)。通過觀察數(shù)據(jù)變量的變化情況,從而發(fā)現(xiàn)程序運行的故障問題所在。在使用GDB調(diào)試程序時,觸發(fā)斷點后,可以使用print命令(簡寫為p),或是同義命令inspect來查看當前程序的運行數(shù)據(jù)。print命令的格式是:

print<express>print/<f><express><express>是表達式,<f>是輸出的格式。GDB數(shù)據(jù)命令2、程序變量數(shù)據(jù)顯示在GDB中,你可以隨時查看以下三種變量的值:

1、全局變量(所有文件可見的)

2、靜態(tài)全局變量(當前文件可見的)

3、局部變量(當前Scope可見的)如果局部變量和全局變量發(fā)生沖突,一般情況下是局部變量會隱藏全局變量,也就是說,用print顯示出的變量的值會是函數(shù)中的局部變量的值。如果此時想查看全局變量的值,可以使用“::”操作符:例如,查看文件f2.c中的全局變量x的值:

(gdb)p'f2.c'::x

當然,“::”操作符會和C++中的發(fā)生沖突,GDB能自動識別“::”是否C++的操作符,所以不必擔心在調(diào)試C++程序時會出現(xiàn)異常。GDB數(shù)據(jù)命令另外,需要注意的是,如果程序編譯時開啟了優(yōu)化選項,那么在用GDB調(diào)試被優(yōu)化過的程序時,可能會發(fā)生某些變量不能訪問,或是取值錯誤碼的情況。這是因為優(yōu)化程序會刪改你的程序,整理你程序的語句順序,剔除一些無意義的變量等,所以在GDB調(diào)試這種程序時,運行時的指令和所編寫指令就有不一樣,也就會出現(xiàn)所想象不到的結(jié)果。出現(xiàn)這種情況時,可以在編譯程序時關(guān)閉編譯優(yōu)化。一般來說,幾乎所有的編譯器都支持編譯優(yōu)化的開關(guān),例如,GNU的C/C++編譯器GCC,你可以使用“-gstabs”選項來關(guān)閉編譯優(yōu)化。GDB數(shù)據(jù)命令3、數(shù)組變量數(shù)據(jù)顯示有時候,需要查看一段連續(xù)的內(nèi)存空間的值。比如數(shù)組的一段,或是動態(tài)分配的數(shù)據(jù)的大小??梢允褂肎DB的“@”操作符,“@”的左邊是第一個內(nèi)存的地址的值,“@”的右邊是想查看內(nèi)存的長度。例如,程序中有這樣的語句:

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

于是,在GDB調(diào)試過程中,可以用如下命令顯示出這個動態(tài)數(shù)組的取值:

p*array@len@的左邊是數(shù)組的首地址的值,也就是變量array所指向的內(nèi)容,右邊則是數(shù)據(jù)的長度,其保存在變量len中,其輸出結(jié)果,大約是下面這個樣子的:

(gdb)p*array@len$1={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40}

如果是靜態(tài)數(shù)組的話,可以直接用print數(shù)組名,就可以顯示數(shù)組中所有數(shù)據(jù)的內(nèi)容了。GDB數(shù)據(jù)命令4、數(shù)據(jù)命令輸出格式一般來說,GDB會根據(jù)變量的類型輸出變量的值。但也可以自定義GDB的輸出的格式。例如,想輸出一個整數(shù)的十六進制,或是二進制來查看這個整型變量的中的位的情況??梢允褂肎DB的數(shù)據(jù)顯示格式:

x按十六進制格式顯示變量。

d按十進制格式顯示變量。

u按十六進制格式顯示無符號整型。

o按八進制格式顯示變量。

t按二進制格式顯示變量。

a按十六進制格式顯示變量。

c按字符格式顯示變量。

f按浮點數(shù)格式顯示變量。GDB數(shù)據(jù)命令舉例:(gdb)pi$21=101(gdb)p/ai$22=0x65(gdb)p/ci$23=101'e'(gdb)p/fi$24=1.41531145e-43(gdb)p/xi$25=0x65(gdb)p/ti$26=1100101GDB數(shù)據(jù)命令5、內(nèi)存數(shù)據(jù)查看可以使用examine命令(簡寫x)來查看內(nèi)存地址中的值。

語法如下:

x/<n/f/u><addr>n、f、u是可選的參數(shù)。

n是一個正整數(shù),表示顯示內(nèi)存的長度,也就是說從當前地址向后顯示幾個地址的內(nèi)容。

f表示顯示的格式,參見上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。

u表示從當前地址往后請求的字節(jié)數(shù),如果不指定的話,GDB默認是4個bytes。u參數(shù)可以用下面的字符來代替,b表示單字節(jié),h表示雙字節(jié),w表示四字節(jié),g表示八字節(jié)。當我們指定了字節(jié)長度后,GDB會從內(nèi)存指定的內(nèi)存地址開始,讀寫指定字節(jié),并把其當作一個值取出來。

<addr>表示一個內(nèi)存地址。n/f/u三個參數(shù)可以一起使用。舉例:命令:x/3uh0x54320

表示,從內(nèi)存地址0x54320讀取內(nèi)容,h表示以雙字節(jié)為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論