如何使用gdb來調試一個應用?(譯)

用C來開發(fā)一個應用,我們不可避免會產生一些錯誤.有些錯誤,編譯時,編譯器便會提示我們.而有些運行時的錯誤,由于在運行時才會出現,很難診斷.比如常見的Segment Fault錯誤.我現在在開發(fā)一個HTTP服務器時,最常見的就是這個錯誤.通常來說,只會給你上面那么一個錯誤提示.這樣的話,我們往往不明所以.但是,有了gdb,這一切都So easy.

這篇文章,便初步介紹了如何使用gdb來調試一個應用.但是,gdb本身也是一個很復雜的工具,所以,我們還需要查詢其他的資料,來了解并掌握gdb的使用方法.

在這篇文章中,我們將分六步,來介紹gdb的使用.

寫一個調試用的C程序

我們寫了一個用于求階乘的程序.但是,這個程序中含有一些錯誤.我們將在后面調試這些錯誤.

-g選項編譯這個C程序

-g選項表明允許編譯器來收集調試信息.

上面的命令會創(chuàng)建一個用于調試的C程序.

用gdb加載這個應用程序

使用下面的命令來加載一個應用.

設置斷點

設置斷點還有其他的格式:

  • break [file_name]:line_number
  • break [file_name]:func_name

將斷點設置在你要調試的地方.當程序執(zhí)行到這個地方,就會自動停止,并輸出一些能夠幫助你進行調試的信息.

在啟動要調試的程序之前,我們先設置斷點:

在gdb中啟動要調試的程序

我們可以在gdb中通過run命令,來啟動被調試的程序.我們也可以設置參數,但是因為我們的程序不需要傳入參數,所以這里我們沒有設置.

程序會自動運行到斷點,然后停止,然后輸出調試信息:

打印變量的值

從上圖中可以看到,因為我們沒有為j這個變量賦初值,所以它獲得了一個隨機值.

我們?yōu)?strong>j賦初值1.然后重新編譯程序.

你可以看到,即使我們修復了程序中的錯誤,執(zhí)行起來仍然有錯誤.

我們先在第十行設置斷點,然后執(zhí)行后面的操作.

Continue, stepping over and in – gdb commands

當程序停在斷點處時,我們可以執(zhí)行下面三條命令中的一條:

  • continue: 執(zhí)行到下一個斷點處
  • next: 執(zhí)行下一條語句
  • step:和next類似,但是不會跳過函數.即如果下一條語句中,包含一個函數,則會進入到這個函數內部.

通過執(zhí)行continue或者step,我們可以發(fā)現程序還有問題是因為我們的循環(huán)終止的條件不正確.把<修改成>即可.

gdb命令縮寫

下面幾個是我們最常用的命令,及他們的縮寫:

  • list的縮寫是其首字母l
  • print的縮寫是其首字母p
  • continue的縮寫是其首字母c
  • step的縮寫是其首字母s
  • 執(zhí)行ENTER,會再次執(zhí)行上面執(zhí)行的最后一條命令

其他gdb命令

  • list命令: 這條命令用于打印源代碼,我們可以通過加上行數這個參數來查看指定的一行,或者加上函數名這個參數來查看指定的函數.
  • backtrack命令: 打印棧.
  • help命令: 查看都有什么命令,以及命令的具體用法.
  • quit: 退出gdb調試器

原文鏈接

http://www.thegeekstuff.com/2010/03/debug-c-program-using-gdb

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蚕钦,一起剝皮案震驚了整個濱河市萌衬,隨后出現的幾起案子,更是在濱河造成了極大的恐慌唉俗,老刑警劉巖闹司,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異灰嫉,居然都是意外死亡扼倘,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門需五,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹉动,“玉大人,你說我怎么就攤上這事宏邮≡笫荆” “怎么了缸血?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長械筛。 經常有香客問我捎泻,道長,這世上最難降的妖魔是什么埋哟? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任笆豁,我火速辦了婚禮,結果婚禮上赤赊,老公的妹妹穿的比我還像新娘闯狱。我一直安慰自己,他們只是感情好抛计,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布扩氢。 她就那樣靜靜地躺著,像睡著了一般爷辱。 火紅的嫁衣襯著肌膚如雪录豺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天饭弓,我揣著相機與錄音双饥,去河邊找鬼。 笑死弟断,一個胖子當著我的面吹牛咏花,可吹牛的內容都是我干的。 我是一名探鬼主播阀趴,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼昏翰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刘急?” 一聲冷哼從身側響起棚菊,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叔汁,沒想到半個月后统求,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡据块,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年码邻,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片另假。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡像屋,死狀恐怖,靈堂內的尸體忽然破棺而出边篮,到底是詐尸還是另有隱情己莺,我是刑警寧澤因苹,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站篇恒,受9級特大地震影響,放射性物質發(fā)生泄漏凶杖。R本人自食惡果不足惜胁艰,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望智蝠。 院中可真熱鬧腾么,春花似錦、人聲如沸杈湾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漆撞。三九已至殴泰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浮驳,已是汗流浹背悍汛。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留至会,地道東北人离咐。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像奉件,于是被迫代替她去往敵國和親宵蛀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容