Linux GDB常用命令一欄


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來代替。

9. Linux GDB命令與Visual Studio Debug下命令對比:

                                Linux                                                   windows

     進入調試                       gdb *.exe                                             F5

                                                  quit                                     

     增加/取消斷點                    break  LineNumber                    F9

                      clear   LineNumber 

    單步運行        next                                                      F10

                                                  step                                                      F11

     開始調試運行      run                                                       F5

  運行到下一個斷點    continue                                             F5

     結束調試        kill                                                       shift+F5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM