gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具,gdb主要可幫助我們完成下面4個方面的功能:
注意:利用gdb除錯,需要在gcc編譯過程中加上-g選項
,這樣編譯生成的可執行檔案才可以利用gdb進行原始碼除錯。-g 選項的作用是在可執行檔案中加入源**的資訊
,比如可執行檔案中第幾條機器指令對應源**的第幾行,但並不是把整個原始檔嵌入到可執行檔案中,所以在除錯時必須保證gdb能找到原始檔。如果把當前的gdb.c改名為g.c或者將gdb.c移動到其他地方,則gdb無法進行除錯。
cmake編譯時支援gdb除錯:
修改cmakelists.txt檔案,如我修改如下:
# version 2.4 might work, but it won't find static libraries with odd names
cmake_minimum_required(version 2.6)
# cmake used to complain without this
#if(command cmake_policy)
# cmake_policy(set cmp0003 new)
#endif(command cmake_policy)
set(cmake_build_type "debug")
set(cmake_cxx_flags_debug "$env -o0 -wall -g2 -ggdb")
set(cmake_cxx_flags_release "$env -o3 -wall")
1)啟動gdb
gdb hello
或者
gdb
file hello
2)顯示程式
list 或者 l
3)打斷點
break(b) main() //函式的入口處
break(b) 11 //行號
break(b) hello.c:14 //特定檔案的行號
break(b) 12 if i=10 //if語句滿足後在行號處打斷點
4)獲取斷點資訊
info break
5)刪除斷點
delete 13(斷點編號)
6)執行程式
run(r)
7)單步(不進入子函式)
next(n)
8)單步(進入子函式)
step(s)
9)繼續執行
continue(c)
10)檢視變數
print(p) i(變數名)
11)執行程式到當前函式結束
finish
12)監控變數
watch i(變數名)
13)退出gdb
quit(q)
命令
描述backtrace(或bt)
檢視各級函式呼叫及引數
finish
連續執行到當前函式返回為止,然後停下來等待命令
frame(或f)
幀編號 選擇棧幀
info(或i)
locals 檢視當前棧幀區域性變數的值
list(或l)
列出源**,接著上次的位置往下列,每次列10行
list 行號
列出從第幾行開始的源**
list 函式名
列出某個函式的源**
next(或n)
執行下一行語句
print(或p)
列印表示式的值,通過表示式可以修改變數的值或者呼叫函式
quit(或q)
退出gdb除錯環境
set var
修改變數的值
start
開始執行程式,停在main函式第一行語句前面等待命令
step(或s)
執行下一行語句,如果有函式呼叫則進入到函式中
GDB 除錯總結
啟動 gdb gdb 然後 gdb file 執行 gdb run 該程式本身的命令列引數 檢視 gdb list 簡寫為 gdb l 技巧 gdb list 1,20 檢視1到 20行的 使用斷點 建立斷點 gdb break 可以簡寫為 gdb b gdb b 這種是為還沒有開啟的源 設定斷點 ...
GDB除錯總結
一 core分析 1 檢視命令 ulimit c 啟動命令 ulimit c ulimited 檢視core檔案 gdb c core.a.out 2 生成core檔案的路徑在檔案 etc sysctl.conf中 cat etc sysctl.conf sysctl.conf檔案中科院設定的格式符...
gdb除錯總結
gdb是linux環境下最強大的除錯工具,可以除錯未執行的程式或者正在執行的程式,還可以分析程式崩潰的coredump檔案,這些的前提是,程式在編譯時新增了 g選項開啟了除錯資訊。使用方法 gdb program 對於有引數的,可以通過gdb內執行 set args param 來設定引數,或者gd...