ubuntu gdb除錯第一次實驗總結
阿新 • • 發佈:2019-02-10
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檔案)