gdb調(diào)試方法

gdb是一個(gè)由GNU開源組織發(fā)布的、UNIX/LINUX操作系統(tǒng)下的、基于命令行的认罩、功能強(qiáng)大的程序調(diào)試工具稠歉。

啟動(dòng)gdb

  • 使用gdb之前掰担,需要講程序編譯出帶Debug信息的格式。(帶上 -g 參數(shù))

**-g ** Produce debugging information in the operating system's native
format (stabs, COFF, XCOFF, or DWARF). GDB can work with this
debugging information.

對(duì)C/C++程序的調(diào)試怒炸,需要在編譯前就加上-g選項(xiàng):

$ g++ -g hello.cc -o hello

調(diào)試可執(zhí)行文件:(可帶參數(shù))

$ gdb <program> <args>

gdb命令

運(yùn)行

  • run:簡(jiǎn)記為 r 带饱,其作用是運(yùn)行程序,當(dāng)遇到斷點(diǎn)后横媚,程序會(huì)在斷點(diǎn)處停止運(yùn)行纠炮,等待用戶輸入下一步的命令。
  • continue (簡(jiǎn)寫c ):繼續(xù)執(zhí)行灯蝴,到下一個(gè)斷點(diǎn)處(或運(yùn)行結(jié)束)
  • next(簡(jiǎn)寫 n):恢口,單步跟蹤程序,當(dāng)遇到函數(shù)調(diào)用時(shí)穷躁,也不進(jìn)入此函數(shù)體耕肩;此命令同 step 的主要區(qū)別是因妇,step 遇到用戶自定義的函數(shù),將步進(jìn)到函數(shù)中去運(yùn)行猿诸,而 next 則直接調(diào)用函數(shù)婚被,不會(huì)進(jìn)入到函數(shù)體內(nèi)。
  • step (簡(jiǎn)寫s):?jiǎn)尾秸{(diào)試如果有函數(shù)調(diào)用梳虽,則進(jìn)入函數(shù)址芯;與命令n不同,n是不進(jìn)入調(diào)用的函數(shù)的
  • until:當(dāng)你厭倦了在一個(gè)循環(huán)體內(nèi)單步跟蹤時(shí)窜觉,這個(gè)命令可以運(yùn)行程序直到退出循環(huán)體谷炸。
  • until+行號(hào): 運(yùn)行至某行,不僅僅用來(lái)跳出循環(huán)
  • finish: 運(yùn)行程序禀挫,直到當(dāng)前函數(shù)完成返回旬陡,并打印函數(shù)返回時(shí)的堆棧地址和返回值及參數(shù)值等信息。
  • call 函數(shù)(參數(shù)):調(diào)用程序中可見的函數(shù)语婴,并傳遞“參數(shù)”描孟,如:call main(55)
  • quit:簡(jiǎn)記為 q ,退出gdb

設(shè)置斷點(diǎn)

  • break n (簡(jiǎn)寫b n):在第n行處設(shè)置斷點(diǎn)(可以帶上代碼路徑和代碼名稱)
  • b fn1 if a>b:條件斷點(diǎn)設(shè)置
  • break func(break縮寫為b):在函數(shù)func()的入口處設(shè)置斷點(diǎn)砰左,如:break cb_button
  • delete 斷點(diǎn)號(hào)n:刪除第n個(gè)斷點(diǎn)
  • disable 斷點(diǎn)號(hào)n:暫停第n個(gè)斷點(diǎn)
  • enable 斷點(diǎn)號(hào)n:開啟第n個(gè)斷點(diǎn)
  • clear 行號(hào)n:清除第n行的斷點(diǎn)
  • info b (info breakpoints) :顯示當(dāng)前程序的斷點(diǎn)設(shè)置情況
  • delete breakpoints:清除所有斷點(diǎn)

查看源代碼

  • list :簡(jiǎn)記為 l 匿醒,其作用就是列出程序的源代碼,默認(rèn)每次顯示10行菜职。
  • list 行號(hào):將顯示當(dāng)前文件以“行號(hào)”為中心的前后10行代碼青抛,如:list 12
  • list 函數(shù)名:將顯示“函數(shù)名”所在函數(shù)的源代碼,如:list main
  • list :不帶參數(shù)酬核,將接著上一次 list 命令的蜜另,輸出下邊的內(nèi)容。

打印表達(dá)式

  • print 表達(dá)式:簡(jiǎn)記為 p 嫡意,其中“表達(dá)式”可以是任何當(dāng)前正在被測(cè)試程序的有效表達(dá)式举瑰,比如當(dāng)前正在調(diào)試C語(yǔ)言的程序,那么“表達(dá)式”可以是任何C語(yǔ)言的有效表達(dá)式蔬螟,包括數(shù)字此迅,變量甚至是函數(shù)調(diào)用。
  • print a:將顯示整數(shù) a 的值
  • print ++a:將把 a 中的值加1,并顯示出來(lái)
  • print name:將顯示字符串 name 的值
  • print gdb_test(22):將以整數(shù)22作為參數(shù)調(diào)用 gdb_test() 函數(shù)
  • print gdb_test(a):將以變量 a 作為參數(shù)調(diào)用 gdb_test() 函數(shù)
  • display 表達(dá)式:在單步運(yùn)行時(shí)將非常有用旧巾,使用display命令設(shè)置一個(gè)表達(dá)式后耸序,它將在每次單步進(jìn)行指令后,緊接著輸出被設(shè)置的表達(dá)式及值鲁猩。如: display a
  • watch 表達(dá)式:設(shè)置一個(gè)監(jiān)視點(diǎn)坎怪,一旦被監(jiān)視的“表達(dá)式”的值改變,gdb將強(qiáng)行終止正在被調(diào)試的程序廓握。如: watch a
  • whatis :查詢變量或函數(shù)
  • info function: 查詢函數(shù)
  • 擴(kuò)展info locals: 顯示當(dāng)前堆棧頁(yè)的所有變量

查詢運(yùn)行信息

  • where/bt :當(dāng)前運(yùn)行的堆棧列表搅窿;
  • bt backtrace 顯示當(dāng)前調(diào)用堆棧
  • up/down 改變堆棧顯示的深度
  • set args 參數(shù):指定運(yùn)行時(shí)的參數(shù)
  • show args:查看設(shè)置好的參數(shù)
  • info program: 來(lái)查看程序的是否在運(yùn)行嘁酿,進(jìn)程號(hào),被暫停的原因男应。

分割窗口

  • layout:用于分割窗口闹司,可以一邊查看代碼,一邊測(cè)試:
  • layout src:顯示源代碼窗口
  • layout asm:顯示反匯編窗口
  • layout regs:顯示源代碼/反匯編和CPU寄存器窗口
  • layout split:顯示源代碼和反匯編窗口
  • Ctrl + L:刷新窗口

參考自:http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沐飘,一起剝皮案震驚了整個(gè)濱河市状蜗,隨后出現(xiàn)的幾起案子瘟忱,更是在濱河造成了極大的恐慌验游,老刑警劉巖容为,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異隔箍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)脚乡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蜒滩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奶稠,你說(shuō)我怎么就攤上這事俯艰。” “怎么了锌订?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵竹握,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我辆飘,道長(zhǎng)啦辐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任蜈项,我火速辦了婚禮芹关,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘紧卒。我一直安慰自己侥衬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布跑芳。 她就那樣靜靜地躺著轴总,像睡著了一般。 火紅的嫁衣襯著肌膚如雪博个。 梳的紋絲不亂的頭發(fā)上怀樟,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音坡倔,去河邊找鬼漂佩。 笑死脖含,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的投蝉。 我是一名探鬼主播养葵,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘩缆!你這毒婦竟也來(lái)了关拒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庸娱,失蹤者是張志新(化名)和其女友劉穎着绊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熟尉,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡归露,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斤儿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剧包。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖往果,靈堂內(nèi)的尸體忽然破棺而出疆液,到底是詐尸還是另有隱情,我是刑警寧澤陕贮,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布堕油,位于F島的核電站,受9級(jí)特大地震影響肮之,放射性物質(zhì)發(fā)生泄漏掉缺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一戈擒、第九天 我趴在偏房一處隱蔽的房頂上張望攀圈。 院中可真熱鬧,春花似錦峦甩、人聲如沸赘来。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)犬辰。三九已至,卻和暖如春冰单,著一層夾襖步出監(jiān)牢的瞬間幌缝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工诫欠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涵卵,地道東北人浴栽。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轿偎,于是被迫代替她去往敵國(guó)和親典鸡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • 程序調(diào)試的基本思想是“分析現(xiàn)象->假設(shè)錯(cuò)誤原因->產(chǎn)生新的現(xiàn)象去驗(yàn)證假設(shè)”這樣一個(gè)循環(huán)過(guò)程坏晦,根據(jù)現(xiàn)象如何假設(shè)錯(cuò)誤原...
    Manfred_Zone閱讀 16,541評(píng)論 0 26
  • 作者: liigo原文鏈接: http://blog.csdn.net/liigo/archive/2006/01...
    wuqingyi閱讀 1,816評(píng)論 0 4
  • 我長(zhǎng)著一張老好人的臉/一張討好的臉/沒(méi)有光彩/動(dòng)物們的臉與人們的臉多么地相似/但它們當(dāng)中沒(méi)有老好人的臉/沒(méi)有討好的...
    草籽閱讀 337評(píng)論 0 5
  • 前段時(shí)間高考落下了帷幕昆婿。 記得很多年前球碉,剛參加完高考,大人們總會(huì)來(lái)個(gè)經(jīng)典之問(wèn) :你們以后想要成為什么樣的人仓蛆? 大部...
    程千尋有話說(shuō)閱讀 221評(píng)論 0 0
  • 正則表達(dá)式簡(jiǎn)述 什么是正則表達(dá)式 正則表達(dá)式睁冬,regular expression,常簡(jiǎn)寫為regexp看疙,re等痴突,...
    0x70e8閱讀 590評(píng)論 0 0