【工具】GDB常見調試命令

1 、基本命令

1.1 啓動和退出GDB

[root@localhost ~]#gdb test
啓動GDB調試test程序

[root@localhost ~]#gdb programe 2146
啓動GDB調試進程號爲2146的進程

[root@localhost ~]# gdb
(gdb) attach 2146
啓動GDB掛載到進程號爲2146的進程上開始調試

(gdb)detach 2146
釋放進程號爲2146的進程,終止調試

(gdb)set args –a –b123 -c
(gdb)show args
設置和查看被調試程序的啓動參數

(gdb)run
(gdb)kill
啓動和停止當前被調試程序,run命令也可跟參數

(gdb)quit
終止調式,退出GDB

1.2 查看源代碼

(gdb)list 123
查看當前源代碼文件中123行及其前後5行的代碼

(gdb)list abc.cpp : 123
查看源文件abc.cpp中123行及其前後5行的代碼

(gdb)list foo
查看函數foo起始行及其前後5行的代碼

(gdb)list abc.cpp : foo
查看源文件abc.cpp中函數foo起始行及其前後5行的代碼

(gdb)list 0xabcd1234
查看包含0xabcd1234地址的代碼行及其前後5行的代碼

2 流程控制

(gdb)s
單步執行

(gdb)n
單步執行,但不展開函數調用

(gdb)c
繼續執行

(gdb)u
執行至循環結束

(gdb)u 123
執行至123行

(gdb)finish
跳出當前函數

(gdb)bt
查看當前函數調用堆棧

(gdb)frame 3
跳轉到函數堆棧中索引爲3的函數上下文

3 查看數據3.1 GDB的數據顯示格式

x 按十六進制顯示
d 按十進制顯示
u 顯示32位無符號整型。
o 按八進制顯示
t 按二進制顯示
a 按地址顯示
c 按字符顯示
f 按浮點數顯示
s 按字符串顯示

3.2 查看變量和數組

(gdb)p foo
查看變量foo的值

(gdb)p *bar
查看指針bar所指對象內容

(gdb)p/x foo
按十六進制查看變量foo的值

(gdb)p bar@10
查看數組bar的10個元素

(gdb)ptype foo
查看foo的類型定義

3.3 查看內存內容

x命令格式:x/[count][format][size] address
size可以是b(byte), h(halfword), w(word), g(giant, 8 bytes)

(gdb)x/10ub ptr
按無符號整形從ptr所指地址開始輸出10字節

(gdb)x/5xw ptr
按16進制從ptr所指地址開始輸出5個字(10字節)

4 斷點4.1 設置斷點

(gdb)b 123
在當前源文件的123行設置斷點

(gdb)b abc.cpp : 123
在源文件abc.cpp的123行設置斷點

(gdb)b foo
在全局函數foo設置斷點

(gdb)b foo::bar
在類foo的成員函數bar設置斷點

(gdb)b ns::foo::bar
在命名空間ns中的類foo的成員函數bar設置斷點

(gdb)b 123 if foo == 1 && bar == 0
在當前源文件123行設置斷點,並且當foo等於1且bar等於0時才命中

4.2 管理斷點

(gdb)info b
查看所有斷點信息

(gdb)d
刪除所有斷點

(gdb)d 2
刪除2號斷點

(gdb)enable 1
打開1號斷點

(gdb)disable 5
禁用5號斷點

5 多線程

(gdb)info threads
查看線程表

(gdb)thread 2
切換到線程表中索引爲2的線程

(gdb)b foo 2
在函數foo設置斷點,並且只在索引爲2的線程中命中

(gdb)set follow-fork-mode parent
當fork調用發生時,繼續調試父進程

(gdb)set follow-fork-mode child
當fork調用發生時,繼續調試子進程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章