GDB基礎(chǔ)

GDB基礎(chǔ)

01 什么是GDB

學(xué)工具和框架最好去官網(wǎng)學(xué)嘱吗。

系統(tǒng)化的學(xué)習(xí)才能成長(zhǎng)点待,碎片化學(xué)習(xí)只會(huì)焦慮昭殉。

GDB是什么東西

GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.

GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:

  • Start your program, specifying anything that might affect its behavior.
  • Make your program stop on specified conditions.
  • Examine what has happened, when your program has stopped.
  • Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.

Those programs might be executing on the same machine as GDB (native), on another machine (remote), or on a simulator. GDB can run on most popular UNIX and Microsoft Windows variants, as well as on Mac OS X.

  • GDB可以在運(yùn)行程序時(shí)檢查程序內(nèi)部到底發(fā)生了什么
  • GDB可以做如下四件事情
    • 開(kāi)始并設(shè)置參數(shù)
    • 打斷點(diǎn)诱咏,令程序在特殊情況下停止
    • 當(dāng)程序停止時(shí)檢查發(fā)生了什么
    • 更改程序中的內(nèi)容,嘗試糾正一個(gè)錯(cuò)誤的影響,然后繼續(xù)檢查另一個(gè)錯(cuò)誤

GDB支持哪些語(yǔ)言

  • Ada、Assembly吠昭、C胧瓜、C++、D府喳、Fortran、Go钝满、Objective-C、OpenCL弯蚜、Modula-2孔轴、Pascal路鹰、Rust

GDB下載安裝

Windows下安裝

RedHat系列Linux發(fā)行版

  • 包括RedHat、RHEL浓领、FedoraCore玉凯、CentOS

  • sudo yum -y install gdb

Debian系列發(fā)行版

  • 包括Debian势腮、Ubuntu

  • sudo apt -y install gdb

常見(jiàn)命令快速上手

  • man gdb查看使用手冊(cè)

  • 編譯時(shí)需要使用gcc -g联贩,加上-g才能調(diào)試,否則變量函數(shù)名等都會(huì)變成地址捎拯。

  • gdb 二進(jìn)制文件將編譯好的為文件使用gdb調(diào)試

斷點(diǎn)調(diào)試相關(guān)

  • r泪幌、run運(yùn)行程序

  • quit退出gdb程序

  • bbreak打斷點(diǎn)署照,后面可接函數(shù)名祸泪、行數(shù),例如break main建芙、break 233

  • l没隘、list展示10行代碼,便于打斷點(diǎn)

  • info b查看已打斷點(diǎn)信息

  • n禁荸、next讓停止的程序向后運(yùn)行一行

  • c右蒲、continue讓停止的程序繼續(xù)運(yùn)行,直到遇到下一個(gè)斷點(diǎn)或退出

  • p赶熟、print打印變量值瑰妄、變量地址等,例如print &value[1]

  • s映砖、step步入具體的函數(shù)進(jìn)行調(diào)試

  • j间坐、jump跳轉(zhuǎn)到指定行

  • uuntil運(yùn)行到指定行

  • fi邑退、finish結(jié)束當(dāng)前調(diào)用函數(shù)

  • d竹宋、delete刪除斷點(diǎn)

實(shí)用技巧

  • shell 命令在gdb中運(yùn)行命令

  • clear清屏

  • set logging on開(kāi)啟日志功能,記錄gdb輸出地技,默認(rèn)在gdb.exe

  • 觀察點(diǎn)watchpoint蜈七,查看變量是否變化,例如watch *地址

    info wathpoints查看當(dāng)前觀察點(diǎn)

調(diào)試core文件

  • 在程序掛掉時(shí)進(jìn)行調(diào)試

  • 大部分系統(tǒng)有資源限制乓土,無(wú)法直接調(diào)試core文件

    ulimit -a顯示目前資源限制的設(shè)定

    如果受到限制就需要用ulimit -c unlimited命令解除宪潮,之后就會(huì)生成core文件

    然后使用gdb 二進(jìn)制文件 core文件進(jìn)行調(diào)試

調(diào)試正在運(yùn)行的程序

  • ps -ef | grep 運(yùn)行文件名查看進(jìn)程號(hào)pid
  • gdb -p 進(jìn)程號(hào)調(diào)試該進(jìn)程

線程相關(guān)

  • 首先使用pstree -p 進(jìn)程號(hào)查看子線程id溯警,pstack查看單個(gè)線程的棧結(jié)構(gòu)

  • gdb attach 線程ID將運(yùn)行的線程放入gdb中

  • info 線程ID查看線程信息

  • backtrace查看當(dāng)前線程的調(diào)用堆棧

  • frame切換到當(dāng)前調(diào)用線程的指定堆棧

  • thread切換到指定線程

  • thread apply 線程號(hào) 命令 讓一個(gè)或者多個(gè)線程執(zhí)行GDB命令command

  • thread apply all ml 讓所有被調(diào)試線程執(zhí)行GDB命令

  • set scheduler-locking off不鎖定任何線程,所有線程都執(zhí)行狡相,這是默認(rèn)值

  • set scheduler-locking on只有當(dāng)前被調(diào)試程序會(huì)執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梯轻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尽棕,更是在濱河造成了極大的恐慌喳挑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滔悉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡回官,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苔巨,“玉大人,你說(shuō)我怎么就攤上這事礁芦〉课玻” “怎么了诀豁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵舷胜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我翻伺,道長(zhǎng)沮焕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任辣辫,我火速辦了婚禮急灭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卖鲤。我一直安慰自己畴嘶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布区匣。 她就那樣靜靜地躺著沉颂,像睡著了一般悦污。 火紅的嫁衣襯著肌膚如雪切端。 梳的紋絲不亂的頭發(fā)上顷啼,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天钙蒙,我揣著相機(jī)與錄音躬厌,去河邊找鬼。 笑死鸿捧,一個(gè)胖子當(dāng)著我的面吹牛疙渣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泼菌,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谣沸!你這毒婦竟也來(lái)了笋颤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赋除,失蹤者是張志新(化名)和其女友劉穎举农,沒(méi)想到半個(gè)月后敞嗡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棱貌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年婚脱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了障贸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吟宦。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖袁波,靈堂內(nèi)的尸體忽然破棺而出辰狡,到底是詐尸還是另有隱情,我是刑警寧澤娃磺,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布叫倍,位于F島的核電站豺瘤,受9級(jí)特大地震影響坐求,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌梨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泛领。 院中可真熱鬧敛惊,春花似錦、人聲如沸锡宋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奠滑。三九已至妒穴,卻和暖如春摊崭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呢簸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工瘦赫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛤迎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓替裆,卻偏偏與公主長(zhǎng)得像窘问,于是被迫代替她去往敵國(guó)和親宜咒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容