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調用發生時,繼續調試子進程


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