Linux日記-gdb命令

來源:互聯網
上載者:User

標籤:

【程式】    

 [編譯成未連結的目標程式/.o檔案]
    [沒有符號表被讀取。請使用 "file" 命令]    
        First, did you correctly compile the c program? Like:
            gcc -g your.c -o aaa
        Once you finish compiling the program, use below command to gdb it:
            gdb aaa
        Or if you start gdb w/o specifying the program `aaa‘, you can input
            `file aaa‘
        in the gdb shell.
    [執行程式]
        run:重新執行
    [查看變數/需要斷點]
        print/p +變數名
            若把斷點設定在迴圈體內部想要迴圈輸出變數值,則需要next命令執行下一條語句。
        [按格式輸出變數]
            p i:正常輸出;p/c i:字元格式設定;p/t i:二進位格式
            
    [調用函數/需要斷點]
        break 19
        run
        print func(3)    //函數中的形參必須換成實參
    [查看數組/需要斷點]
        break 12
        run
        print sz
    [自動顯示變數/需要斷點]
        break 15
        run
        display/d i        //格式化自動輸出i
        display/d result    //格式化輸出result
        step/next            //執行下一步並顯示當前display中自動輸出變數(i和result)的值
        info display    //查看當前display中的自動顯示變數的編號+格式+變數名
        [刪除自動顯示變數]
            delete display 1    //根據info得到的編號刪除某個自動顯示變數
            undisplay            //刪除當前display中所有的變數
        [啟用/禁用自動提示]
            disable display [1]    //display後加行號表示禁用當前行,不加表示禁用所有行
            enable display [1]    //啟用,作用同上
            disable display 1 2    //中間空格可以操作多個自動顯示變數

【斷點】  

 註:<1>斷點之後的命令不會自動執行(無論是main還是其他函數中),只能手動一步步走;
        <2>斷點會跟著調用函數從而進入外部函數體內。
    [建立斷點]
        break 1
    [刪除端點]
        <1>(gdb)delete breakpoint 1    //刪除當前位置斷點,1代表第一個斷點
        <2>clear    //刪除程式上次停止處的斷點
        <3>clear 20    //刪除第20行的所有斷點
        
    [設定斷點有效無效]
        enable/disable breakpoint
    [查看當前斷點資訊]
        info break/b
    [斷點處變數數值]
        print/p +變數名
            若把斷點設定在迴圈體內部想要迴圈輸出變數值,則需要next命令執行下一條語句。
    [快速鍵進入下一個斷點]
        註:<1>[斷點之後]可以使用run、continue、next、step繼續執行。
            <2>斷點停下來後如果被繼續執行了一次,那麼接下來的程式執行可以使用Enter代替剛才的命令。
            #.run continue next step的區別
              [run]:頭部=>斷點
                  是指把gcc -c編譯好的中間程式從頭執行,保留斷點/自動顯示等屬性;
              [continue]:斷點=>結束/迴圈一次
                  如果斷點不在迴圈內部,那麼執行一次就直接輸出結果;如果斷點在迴圈裡面,那麼執行一次就等於進行了一次迴圈(方便~);
              [step]:斷點=>斷點+1命令列(進入被調函數)
                  如果命令將要啟動並執行原始碼行上有函數調用,那麼step命令將導致GDB進入到被調用函數的內部。        
              [next]:斷點=>斷點+1命令列(不進入被調函數)
                  則和step不同,它不會進入函數,而是在出口坐等。
            //以上四種都可以在斷點後設定自動顯示變數,特別是在迴圈內部用於監控數值變化。
    [條件斷點]:符合條件時斷點才會出現,用於迴圈/判斷中
        <1>break 6    //假設info break是2號
           condition 2 i==5    //當i=2時在第6行加上斷點,其他情況等於這個斷點不存在
        <2>break 6 if i==5    //含義同上,只不過合起來寫了            
    

   

Linux日記-gdb命令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.