gdb常用调试命令汇总!
在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 = {num = 0,link = {next=0x400530}}
(gdb) set print element 0 完整顯示字符串的值,沒有省略號...
?
在gdb環境中按快捷鍵cTRL + X + A,彈出源碼窗口,再次按該組合鍵后恢復原狀.
下面是補充:
?
1. 調試core dump文件時,可以用frame查看堆棧的某個位置(當然gdb調試也可以)。這樣可以看到其他位置的變量,而不僅僅是出錯的那個地方。
2. 自定義函數,譬如我需要頻繁的執行c然后bt,可以定義個函數:
?
[plain]?view plaincopy
- (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常用调试命令汇总!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js中substr,substring,
- 下一篇: 最新 crtmpserver 源码的获取