gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc、bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc、bcb的圖形化偵錯程式更強大的功能。所謂「寸有所長,尺有所短」就是這個道理。
一般來說gdb主要除錯的是c/c++的程式。要除錯c/c++的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(cc/gcc/g++)的 -g 引數可以做到這一點。如:
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
gdb +程式名 執行(gdb main)
使用 "--tui" 引數,可以在終端視窗上部顯示乙個源**檢視窗。
gdb --tui main
list(l) 檢視最近10行原始碼
list fun 檢視fun函式原始碼
list file:fun 檢視file檔案中的fun函式原始碼
list num1 num2 檢視num1~num2行的原始碼
break 行號
break fun 在函式處設定斷點
break file:行號
break file:fun
break if 條件成立時程式停住
info break (i b)檢視斷點
watch expr 當expr的值發生改變時,程式停住
delete n 刪除斷點
run/r 啟動程式
continue(c) 執行至下乙個斷點
step(s) 單步跟蹤,進入函式
next(n) 單步跟蹤,不進入函式
finish 執行程式,直到當前函式完成返回,並列印函式返回時的堆疊位址和返回值及引數資訊
until 執行程式直到程式退出迴圈體
print i (p i) 檢視變數的值
ptype 檢視變數型別
print array 檢視陣列
print *array@len 檢視動態記憶體
print x=5 改變執行時的資料
print &array 檢視陣列的位址
回車代表上乙個命令
core檔案
在程式崩潰時,一般會生成乙個檔案叫core檔案。core檔案記錄的是程式崩潰時的記憶體映像,並加入除錯資訊。core檔案生成的過程叫做core dump
設定生成core檔案
ulimit -c 檢視core-dump狀態
ulimit -c 數字
ulimit -c unlimited
gdb利用core檔案除錯
gdb 檔名 core檔案
backtrace(bt) 檢視堆疊
多執行緒除錯
info threads 顯示當前可除錯的所有執行緒
thread id 切換當前除錯的執行緒為指定id的執行緒
attach process-id 在gdb狀態下,開始除錯乙個正在執行的程序
下面給大家乙個好玩的多執行緒程式,答案就在某個執行緒的堆疊中,先不要看下面的答案,自己試著用gdb玩一下哈(linux 64bit)。
答案在下面圖中,先不要看。。
GDB常用除錯命令以及多程序多執行緒除錯
今天把所有的gdb常用的除錯命令都過了一遍,尤其是多執行緒除錯。所以先做個總結,以免忘記。以後如果有新的有用的命令會繼續追加。執行命令。打斷點,使用方法 對於break命令,我們要靈活使用。例如打多個斷點。多執行緒程式中我們可以主函式中線程建立後立即打斷點,執行執行緒函式入口打斷點等。關閉斷點 de...
GDB常用除錯命令以及多程序多執行緒除錯
今天把所有的gdb常用的除錯命令都過了一遍,尤其是多執行緒除錯。所以先做個總結,以免忘記。以後如果有新的有用的命令會繼續追加。執行命令。打斷點,使用方法 對於break命令,我們要靈活使用。例如打多個斷點。多執行緒程式中我們可以主函式中線程建立後立即打斷點,執行執行緒函式入口打斷點等。關閉斷點 de...
gdb多執行緒除錯
先介紹一下gdb多執行緒除錯的基本命令。info threads顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。thread id切換當前除錯的執行緒為指定id的執行緒。break thread test.c 12...