Linux GDB常用命令
阿新 • • 發佈:2019-01-02
Linux GDB 常用命令如下:
1.啟動和退出gdb
(1)啟動:gdb ***:顯示一段版權說明; (*** 表示可執行程式名)(2)退出:quit。有的時候輸入quit後會出現相關提示:類似於“(y/n)”,輸入y
2.顯示和查詢程式原始碼
(1)list :顯示10行程式碼,但是我為什麼沒有顯示成功呢?(2)list 5,10:顯示原始檔第五行到第十行的程式碼
(3)list t4.c:5,10:顯示原始檔中第五行到第十行的程式碼,在跳是含有多個原始檔的次序時使用;
(4)list get_sum:顯示get_sum函數週圍的程式碼//什麼叫周圍的程式碼呢?
(5)list t4.c :get_sum:顯示原始檔t4.c中第五行到第十行的程式碼,在跳是含有多個原始檔的次序時使用;
(6)如果在除錯中執行linux命令,則可以在gdb的提示符下輸入shell命令. (gdb)shell ls
(7)search forward用來從當前行向前查詢第一個匹配的字串;
search get_sum forward get_sum
(8)reverse_search 用來從當前行想前查詢第一個匹配的字串: Example: reverse_search main
3.執行程式和獲得幫助;
gdb -q test 或者file test只是裝入程式,程式並沒有執行。如果要程式開始執行,在gdb提示符下輸入run即可。如果想要詳細瞭解gdb某個命令的使用方法,可以用help 命令 Example:(gdb)help list (gdb)help all
4.設定和管理斷點
(1)以行號設定斷點:(gdb)break 7(2)以函式名設定斷點:(gdb)break get_sum
(3)以條件表示式設定斷點:
方法一:break 行號或者函式名 if 條件. Example: (gdb)break 7 if i==99
方法二:watch 條件表示式
方法三:awatch;用來給表示式設定斷點,在表示式的值發生改變或者表示式的值杯讀取的時候,程式暫時停止;(4)檢視當前設定的斷點:info breakpoints
Num Type Disp Enb Address What
【解釋】
Num列表示斷點的編號。
Type指明型別,型別位breakpoints說明是中斷。
Disp指示中斷點在生效一次後是否就失去作用,如果是則為dis,不時則為keep。
Bnb表明當前中斷點是否有效,如果是y,不是則為n。
Address列表中斷所處的記憶體地址。
What列出中斷髮生在哪個函式的第幾行。
5.使斷點失效或者有效
使用“disable 斷點編號”命令可以是某個斷點失效,程式執行到該段點時不會停下來而是繼續執行。使用“enable 斷點編號”命令可以是某個斷點恢復有效。
6.刪除斷點
disable只是讓某個斷點暫時失效,斷點依然存在與程式中。如果要徹底的刪除某個斷點,可以使用clear或者delete命令。(1)clear:刪除程式中所有的斷點;
(2)clear 行號:刪除此行中的斷點
(3)clear 函式名:刪除該函式的斷點
(4)delete 斷點編號:刪除指定編號的斷點。如果一次要刪除多個斷點,各個斷點編號以空格隔開。
7.檢視和設定變數的值
(1)print 變數或表示式 --- print 變數=值:對變數賦值 --- print 表示式@要列印的值的個數n:列印以表示式值開始n個數(2)whatis命令:顯示某個變數或表示式的資料型別。格式:whatis 變數或者表示式
(3)set 命令:給變數賦值,格式:set variable 變數=值
將上面例項中的print i=200改為set variable i=200可以得到同樣的效果//這個不懂矮。。
除了這個用法外,set命令還有一些其他用法。比如可以針對遠端除錯進行設定,可以用來設定gdb一行的字元數等。
8.控制程式的執行
(1)continue命令:讓程式繼續執行,直到下一個斷點或者執行完為止。格式:continue(2)kill命令:用於結束當前程式的除錯
(3)next和step命令
區別:如果遇到函式,next會把函式呼叫當作一條語句來執行,再次輸入next會執行函式呼叫後的語句;
而step則會跟蹤進入函式,一次一條的執行函式內的程式碼,直到函式內的程式碼執行完,在進行函式呼叫後的語句;
(4)nexti和stepi命令:用來單步執行一條機器指令,注意不是單步執行一條魚據。單步執行一條語句使用next和step命令。通常一條語句有多條機器指令構成的。
注意的是:gdb的一些命令可以簡寫,比如list可以用li來代替,continue命令可以用cont來代替。