在debug模式下,使用gdb進行除錯,可以使用的命令彙總如下:
(gdb) p *(*phead)->next 這裡宣告語句listnode** phead,表示檢視*phead執行鍊錶節點的next域的指標
(gdb) bt full 相比bt能顯示更詳細的區域性變數資訊
(gdb) b hookfactory.cpp:173 在原始檔指定行數處加斷點
(gdb) b main.cpp:murlproc 在原始檔指定函式處加斷點
(gdb) b chttpclient::initialize() 在指定類名的成員函式處加斷點
(gdb) l 直接在當前stack frame中檢視當前函式的**,比較直觀
(gdb) info b 列出所有斷點資訊,包括address,type,description
(gdb) disa 1 禁用斷點
(gdb) info b[1] 列出第乙個斷點的資訊
(gdb) delete all 刪除所有斷點資訊
(gdb) frame 8 or f8 檢視第8層棧幀的函式呼叫,包括其中的區域性變數
(gdb) set print elements 0 設定列印完整字串資訊,不然,未列印出的字串會顯示「...」符號
(gdb) p *(cmoduleinfo *)gmainconfig.modules[i] 檢視複雜的結構體資訊
(gdb) p *obj.m_alt 正常顯示結構體的資訊
(gdb) p info->m_ua_req_hdr.length() 計算函式表示式
$9 = 342
(gdb) p *this 列印當前物件中各成員的值
(gdb) p this->f 列印出指定成員f的內部資訊
(gdb) p *(char *)p 對void*型別的指標p,轉換型別後檢視它的位址,使用p *p會出錯
(gdb) f 列印函式
(gdb) set print pretty on 以整潔的格式顯示,而非顯示一整行
(gdb) p so 將類或結構體so以排列好的格式列印出來,比如
$2 =
}
(gdb) set print element 0 完整顯示字串的值,沒有省略號...
在gdb環境中按快捷鍵ctrl + x + a,彈出原始碼視窗,再次按該組合鍵後恢復原狀.
下面是補充:
1. 除錯core dump檔案時,可以用frame檢視堆疊的某個位置(當然gdb除錯也可以)。這樣可以看到其他位置的變數,而不僅僅是出錯的那個地方。
2. 自定義函式,譬如我需要頻繁的執行c然後bt,可以定義個函式:
[plain]view plain
copy
(gdb) define doit
>c
>bt
>end
然後執行這個函式就好了:
(gdb) doit
然後不斷回車就可以了。
3.可以用x檢視記憶體資訊,譬如檢視128個位元組:x /128xb data_ptr,可以看到指標data_ptr的128個位元組的記憶體資訊。
here is an example. if a program says
int *array = (int *) malloc (len * sizeof (int));
you can print the contents of array with
p *array@len
4.gdb裡設定臨時變數
使用 set 命令。
(gdb) set $i="hello"
(gdb) ptype $i
type = char [6]
(gdb) set $i=1
(gdb) ptype $i
type = int
(gdb) set $i=(char)1
(gdb) ptype $i
type = char
(gdb) set $i=(short)1
(gdb) ptype $i
type = short
GDB常用除錯命令
呼叫gdb編譯需要在cc後面加 g引數再加 o root redhat home gdb 除錯檔案 啟動gdb gdb l 字母l 從第一行開始列出原始碼 gdb break n 在第n行處設定斷點 gdb break func 在函式func 的入口處設定斷點 gdb info break 檢視斷...
gdb常用除錯命令
將.c檔案程式設計成包含標準除錯資訊的檔案 命令 gcc g c o 1 啟動gdb除錯程式 兩種方式 a gdb filename b 啟動gdb後,使用file filename 2 list l 檢視程式 方便設定斷點 3 break b 函式名 在某函式入口處新增斷點 4 break 行號 ...
GDB 常用除錯命令
呼叫gdb編譯需要在cc後面加 g引數再加 o root redhat home gdb 除錯檔案 啟動gdb gdb l 字母l 從第一行開始列出原始碼 gdb break n 在第n行處設定斷點 gdb break func 在函式func 的入口處設定斷點 gdb info break 檢視斷...