GDB 基礎調試總結

GDB是一個由GNU開源組織發佈的、UNIX/LINUX操作系統下的、基於命令行的、功能強大的程序調試工具。

基礎調試命令:

 命令  解釋  示例
file <文件名> 加載被調試的可執行程序文件。
因爲一般都在被調試程序所在目錄下執行GDB,因而文本名不需要帶路徑。
(gdb) file gdb-sample
r Run的簡寫,運行被調試的程序。
如果此前沒有下過斷點,則執行完整個程序;如果有斷點,則程序暫停在第一個可用斷點處。
(gdb) r
c Continue的簡寫,繼續執行被調試程序,直至下一個斷點或程序結束。 (gdb) c
b <行號>
b <函數名稱>
b *<函數名稱>
b *<代碼地址>

d [編號]

b: Breakpoint的簡寫,設置斷點。兩可以使用“行號”“函數名稱”“執行地址”等方式指定斷點位置。
其中在函數名稱前面加“*”符號表示將斷點設置在“由編譯器生成的prolog代碼處”。如果不瞭解彙編,可以不予理會此用法。

d: Delete breakpoint的簡寫,刪除指定編號的某個斷點,或刪除所有斷點。斷點編號從1開始遞增。

(gdb) b fielname:8
(gdb) b main
(gdb) b *main
(gdb) b *0x804835c

(gdb) d

s, n s: 執行一行源程序代碼,如果此行代碼中有函數調用,則進入該函數;
n: 執行一行源程序代碼,此行代碼中的函數調用也一併執行。

s 相當於其它調試器中的“Step Into (單步跟蹤進入)”;
n 相當於其它調試器中的“Step Over (單步跟蹤)”。

這兩個命令必須在有源代碼調試信息的情況下纔可以使用(GCC編譯時使用“-g”參數)。

(gdb) s
(gdb) n
si, ni si命令類似於s命令,ni命令類似於n命令。所不同的是,這兩個命令(si/ni)所針對的是彙編指令,而s/n針對的是源代碼。 (gdb) si
(gdb) ni
p <變量名稱> Print的簡寫,顯示指定變量(臨時變量或全局變量)的值。 (gdb) p i
(gdb) p nGlobalVar
display ...

undisplay <編號>

display,設置程序中斷後欲顯示的數據及其格式。
例如,如果希望每次程序中斷後可以看到即將被執行的下一條彙編指令,可以使用命令
“display /i $pc”
其中 $pc 代表當前彙編指令,/i 表示以十六進行顯示。當需要關心彙編代碼時,此命令相當有用。

undispaly,取消先前的display設置,編號從1開始遞增。

(gdb) display /i $pc

(gdb) undisplay 1

i Info的簡寫,用於顯示各類信息,詳情請查閱“help i”。 (gdb) i r
q Quit的簡寫,退出GDB調試環境。 (gdb) q
help [命令名稱] GDB幫助命令,提供對GDB名種命令的解釋說明。
如果指定了“命令名稱”參數,則顯示該命令的詳細說明;如果沒有指定參數,則分類顯示所有GDB命令,供用戶進一步瀏覽和查詢。
(gdb) help display
watch
watch命令可以觀察變量的變化,在變量變化時自動斷點
watch 可以watch 變量名或變量地址  (p &a查看變量a的地址
(gdb) watch a
(gdb) watch *(int *)0x7fff84b67b08
l
Line的簡寫,查看當前文本代碼
(gdb)l
attach attach 關聯需要調試的進程ID
查看進程ID : ps -ef|grep svr_name
(gdb) attch 3001


makefile文件需要增加 -g 調試,才能夠進行gdb


GDB調試服務端:

服務端進程都已經啓動,不需要gdb再去執行,只需要attach到那個進程號即可

ps -ef|grep svr_name                //命令查看進程ID

attcht  進程ID                            //關聯進程

break  filename:line_num         //設置文件行斷點

break  function_name              //設置函數名斷點

c                                               //執行程序,直到下個斷點



GDB調試可執行文件:

GDB進入gdb調試命令

通過file  filename  調試文件

break設置斷點

run命令執行程序

n/s命令代碼

不需要單步,c命令執行程序,直到下一斷點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章