1. 程式人生 > >gdb調試常用實用命令和core dump文件的生成(轉)

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

targe ini delete 速度 .com 常用 let 設置斷點 locals

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優化編譯會提高程序運行速度

轉自:https://eric-gcm.iteye.com/blog/2149842

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