gdb調試常用實用命令和core dump文件的生成


 

 

1、生成core dump文件的方法:

  $  ulimit -c //查看是否為0

    如果為0

 $   ulimit -c unlimited

    這樣在程序崩潰以后會在當前目錄生成一個core.xxxx的文件

 

2、調試core dump文件

    生成了core.xxx文件以后

  $  gdb ./應用程序  core.xxxx

  就會恢復現場到你的程序崩潰的那一刻

 (gdb)bt          //這個命令會列出程序崩潰時的堆棧信息,一層一層會有標號  #0  #1  #2 .......

  如果你要查看某一層的信息,你需要在切換當前的棧,一般來說,程序停止時,最頂層的棧就是當前棧,如果你要查看棧下面層的詳細信息,首先要做的是切換到你想看的棧

(gdb)f  N    //N是你想要切換的棧的標號,達到后可以用  ‘p  變量’  查看變量的值,以查找異常出現的原因

 

     info args
        打印出當前函數的參數名及其值。
    
     info locals
        打印出當前函數中所有局部變量及其值。
       
     info catch
        打印出當前的函數中的異常處理信息。

 

3、gdb調試命令

 

 l  列出此刻運行到代碼行的函數的上下文代碼

 b  設置斷點

 r  開始運行程序

 s  單步調試,進入函數

 n  單步,不進入下一層函數

 n  k(一個數字) 這樣是相當於輸入了k次n,也就是走了k步

 c  繼續運行程序(一般是跑到斷點后,跟了幾步,輸入c繼續往下一個斷點跑)

[enter]  回車鍵默認執行上一次的命令

finish     執行完當前函數返回到調用他的函數,例如單步執行如果進入到了某函數,但你又想退出該函數

u(until) 制定程序直到退出當前的循環體,輸入u自動執行完全部的循環

break 34 if  var=12     //設置條件斷點,當var等於12的時候就在34行設置斷點watch i != 10      //監控某一個條件,然后設置斷點,如果i不等於10的時候,就設置斷點

break  func      //為某一個函數設置斷點

break  filename:N      //在某一個文件的第N行設置斷點

info breakpoints         顯示所有的斷點的信息

delete N          //刪除標號為N的斷點

delete        刪除所有的斷點

clear  N    //清楚N上面的所有的斷點

p    var     打印變量var的值

//打印字符串的時候,有長度限制,想打印完整的長字符串,通過命令set print element 0就可以了

p   /x var     以16進制顯示var的值

                   x 16進制

                   d 10進制

                   t   二進制

                   c   按字符格式顯示變量

                   f    按浮點數

print *a@10         //如果a是一個數組,這樣顯示數據的10個元素的值

print   var=10       //修改運行時變量的值

whatis  var          //顯示一個變量的類型

ptype var           //更詳細的方式顯示變量var的類型,會打印出var的結構定義

 

4、編譯的時候要加入-g選項,才可以對程序進行跟蹤

 

5、gdb調試程序的時候打印變量值會出現<value optimized out> 情況,可以在gcc編譯的時候加上 -O0參數項,意思是不進行編譯優化,調試的時候就會順暢了,運行流程不會跳來跳去的,發布項目的時候記得不要在使用 -O0參數項,gcc 默認編譯或加上-O2優化編譯會提高程序運行速度


免責聲明!

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



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