gdb常用除錯命令以及多執行緒堆疊的檢視

2021-09-22 22:25:20 字數 1768 閱讀 5931

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...