日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

gdb常用调试命令汇总!

發(fā)布時(shí)間:2023/11/27 生活经验 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gdb常用调试命令汇总! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在debug模式下,使用GDB進(jìn)行調(diào)試,可以使用的命令匯總?cè)缦?#xff1a;

(gdb) p *(*pHead)->next? ?這里聲明語句ListNode** pHead,表示查看*pHead執(zhí)行鏈表節(jié)點(diǎn)的next域的指針?

(gdb) bt full 相比bt能顯示更詳細(xì)的局部變量信息

(gdb) b ? hookfactory.cpp:173 ? 在源文件指定行數(shù)處加斷點(diǎn)

(gdb) b ? main.cpp:MURLProc 在源文件指定函數(shù)處加斷點(diǎn)

(gdb) b ? CHttpClient::initialize() 在指定類名的成員函數(shù)處加斷點(diǎn)

(gdb) l 直接在當(dāng)前stack frame中查看當(dāng)前函數(shù)的代碼,比較直觀

(gdb) info b ?列出所有斷點(diǎn)信息,包括Address,Type,description

(gdb) disa 1 禁用斷點(diǎn)

(gdb) info b[1] ?列出第一個(gè)斷點(diǎn)的信息

(gdb) delete all ?刪除所有斷點(diǎn)信息

(gdb) frame 8 or f8 查看第8層棧幀的函數(shù)調(diào)用,包括其中的局部變量

(gdb) set print elements 0 設(shè)置打印完整字符串信息,不然,未打印出的字符串會(huì)顯示“...”符號(hào)

(gdb)?p *(CModuleInfo *)gMainConfig.modules[i] ?查看復(fù)雜的結(jié)構(gòu)體信息

(gdb) p *obj.m_alt ?正常顯示結(jié)構(gòu)體的信息

(gdb) p info->m_ua_req_hdr.length() ?計(jì)算函數(shù)表達(dá)式

? $9 = 342

(gdb) p *this 打印當(dāng)前對(duì)象中各成員的值

(gdb) p this->f ?打印出指定成員f的內(nèi)部信息

(gdb) p *(char *)p 對(duì)void*類型的指針p,轉(zhuǎn)換類型后查看它的地址,使用p *p會(huì)出錯(cuò)

(gdb) f 打印函數(shù)

(gdb) set print pretty on 以整潔的格式顯示,而非顯示一整行

(gdb) p so 將類或結(jié)構(gòu)體so以排列好的格式打印出來,比如

        $2 = {num = 0,link = {next=0x400530}}

(gdb) set print element 0 完整顯示字符串的值,沒有省略號(hào)...

?

在gdb環(huán)境中按快捷鍵cTRL + X + A,彈出源碼窗口,再次按該組合鍵后恢復(fù)原狀.

下面是補(bǔ)充:

?

1. 調(diào)試core dump文件時(shí),可以用frame查看堆棧的某個(gè)位置(當(dāng)然gdb調(diào)試也可以)。這樣可以看到其他位置的變量,而不僅僅是出錯(cuò)的那個(gè)地方。

2. 自定義函數(shù),譬如我需要頻繁的執(zhí)行c然后bt,可以定義個(gè)函數(shù):

?

[plain]?view plaincopy

  1. (gdb)?define?doit??
  2. >c??
  3. >bt??
  4. >end??
  5. ??
  6. ??
  7. 然后執(zhí)行這個(gè)函數(shù)就好了:??
  8. (gdb)?doit??
  9. 然后不斷回車就可以了。??

3.可以用x查看內(nèi)存信息,譬如查看128個(gè)字節(jié):x /128xb data_ptr,可以看到指針data_ptr的128個(gè)字節(jié)的內(nèi)存信息。

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里設(shè)置臨時(shí)變量
使用 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

總結(jié)

以上是生活随笔為你收集整理的gdb常用调试命令汇总!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。