1. 程式人生 > >ubuntu gdb除錯第一次實驗總結

ubuntu gdb除錯第一次實驗總結

ubuntu下將一個hello.c檔案經過預編譯(.i)、編譯(.s)、彙編(.o)、連結到可執行檔案hello.out的過程的命令列為:

gcc -E hello.c -o hello.i

gcc -S hello.i -o hello.s

gcc -c hello.s -o  hello.o

gcc hello.o -o hello.out

執行:./hello.out

gdb: gdb hello.out 或 gdb -q(安靜模式) hello.out

斷點:
新增斷點: b 3(行號) 或b main(函式名) b 標號(_start+1)
檢視所有斷點資訊: info reg breakpoints
刪除斷點: delete breakpoint Num(Num為斷點的序號,不是斷點所在行號)

執行程式:r(run)
下一步:n(next)  或 s(step),執行到某個函式方法時,step可以跳進函式裡面,next會直接跳過
退出當前迴圈:finish

display: 設定程式中斷後欲顯示的資料和格式
常用的:: display /i $pc 
($pc代表當前彙編指令,/i代表16進位制,這條語句執行了,每次程式中斷的時候都能看到即將執行的彙編指令)
如display /d $eip:每次程式中斷的時候都會以10進位制打印出eip的值
undisplay <編號>: 取消前面的display設定,以後每次程式中斷就不會顯示使用display命令要求顯示的值了


檢視所有的暫存器: info reg
檢視某個暫存器  : info reg eax(暫存器名),也可用print /d $eax(資料格式,d是十進位制, $eax(暫存器))
檢視標誌暫存器: print $eflags

檢視變數a的值: print  a
檢視變數a的地址: print &a

檢視記憶體     : x/5bt,檢視5個位元組(b),以二進位制形式顯示(t),x/5bx,x代表(16進位制)顯示,b也可換成w(4位元組)或h(2位元組)
另: 計算機的記憶體是有尊嚴的,不是啥都讓你隨便訪問
檢視幫助: help  如檢視有關breakpoint的命令  help breakpoint

補全命令提示: 連按2下Tab

視窗:
檢視彙編視窗: layout asm
原始碼和彙編視窗同時顯示: layout split
退出視窗,回到傳統模式下:Ctrl+x,再按a

檢視原始碼:list 
檢視原始碼n到m行:list n,m

設定list預設顯示的m行:set listsize m 

傳統模式下:
顯示當前目錄下檔案:   ls
刪除某個檔案:   rm demo.c(刪除demo.c檔案)