一钢坦、調(diào)試-使用gdb調(diào)試linuxC程序

  1. gdb是linux操作系統(tǒng)特有的調(diào)試工具某筐,可以完成一般IDE提供的所有調(diào)試功能比搭。使用gdb調(diào)試程序之前,必須使用gcc的-g選項編譯程序南誊,使生成的可執(zhí)行文件中附帶有源代碼文件的信息身诺。
  2. 編寫例程如下,隨后使用gdb調(diào)試該程序
    #include<stdio.h>
    int add_range(int min, int max){
        int sum ;
        for(int i = min; i < max + 1 ; i++){
            sum = sum + i;
        }
        return sum;
    }
    int main(){
        int range[5];
        range[0] = add_range(1, 10);
        range[1] = add_range(1, 100);
        printf("range[0]=%d\n", range[0]);
        printf("range[1]=%d\n", range[1]);
        return 0;
    }
    

    gdb exec_name進入調(diào)試界面弟疆,使用help查看當前可用的命令種類



    使用l(list)查看源代碼戚长,一次10行,當我們在gdb中直接回車怠苔,默認執(zhí)行上次命令



    使用start命令開始執(zhí)行程序同廉,程序停留在main函數(shù)第一行

    n(next)可以單步執(zhí)行程序,s(step)命令可以跳入函數(shù)中查看函數(shù)執(zhí)行的細節(jié)



    使用bt(backtrace)命令查看程序棧幀柑司,可以在不同棧幀中切換來查看不同環(huán)境的變量值迫肖。使用i(info)查看變量值

    切換至main堆棧,查看main函數(shù)中本地變量的值

    p(print)打印某變量的值

    display可以現(xiàn)實每步程序運行之后某變量的值

    如果不再需要display的結果攒驰,可以使用undisplay取消顯示



    finish使當前函數(shù)運行至return返回

    在程序中蟆湖,如果發(fā)現(xiàn)某變量賦值不當,可以直接在調(diào)試中更改該變量的值玻粪,查看程序運行結果set var name=value

    初步調(diào)試指令如下
    backtrace\finish\frame\info\list\next\print\set var\start\step
  3. 斷點
    編寫例程如下
    #include<stdio.h>
    #include<string.h>
    int main(){
        char num[10];
        int sum = 0;
        while(1){
            scanf("%s", num);
            long sum = 0;
            if(strcmp(num, "q") == 0){
                break;
            }
            for( int i = 0; i< strlen(num); i++ ){
                sum = sum*10 + num[i] - '0';
            }
            printf("sum=%d\n", sum);
        }
        return 0;
    }
    

    使用gdb調(diào)試程序隅津,break命令在某行設置一個斷點



    break后不僅可以跟行號,還可以跟函數(shù)名稱劲室,使用continue命令繼續(xù)執(zhí)行程序伦仍,遇到斷點自動停止。使用disable breakpoints num可以暫時禁用某個斷點



    可以使用delete breakpoints num刪除斷點很洋,使用break(b)查看當前斷點分布

    斷點調(diào)試常用指令
    break n\break function_name\break ... if ...\continue\ delete breakpoints num\disable breakpoints num\enable num\run\

  4. 觀察點
    觀察點可以讓我們監(jiān)視某個內(nèi)存單元充蓝,當單元的內(nèi)容改變時,提示我們它發(fā)生了那些變化喉磁,常用在程序某個變量發(fā)生改變谓苟,但我們又不知道它何時發(fā)生了改變的情況
    使用watch設置觀察點,查看某個變量的變化情況



    使用info watchpoints查看當前觀察點



    x命令用來打印內(nèi)存空間的值协怒,b表示按字節(jié)涝焙,5表示打印5組
  5. 使用gdb的backtrace指令可以讓我們?nèi)菀装l(fā)現(xiàn)段錯誤由何引起


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孕暇,隨后出現(xiàn)的幾起案子纱皆,更是在濱河造成了極大的恐慌湾趾,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件派草,死亡現(xiàn)場離奇詭異搀缠,居然都是意外死亡,警方通過查閱死者的電腦和手機近迁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門艺普,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鉴竭,你說我怎么就攤上這事歧譬。” “怎么了搏存?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵瑰步,是天一觀的道長。 經(jīng)常有香客問我璧眠,道長缩焦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任责静,我火速辦了婚禮袁滥,結果婚禮上,老公的妹妹穿的比我還像新娘灾螃。我一直安慰自己题翻,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布腰鬼。 她就那樣靜靜地躺著嵌赠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熄赡。 梳的紋絲不亂的頭發(fā)上猾普,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音本谜,去河邊找鬼。 笑死偎窘,一個胖子當著我的面吹牛乌助,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陌知,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼他托,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仆葡?” 一聲冷哼從身側響起赏参,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤志笼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后把篓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纫溃,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年韧掩,在試婚紗的時候發(fā)現(xiàn)自己被綠了紊浩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡疗锐,死狀恐怖坊谁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滑臊,我是刑警寧澤口芍,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站雇卷,受9級特大地震影響鬓椭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聋庵,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一膘融、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧祭玉,春花似錦氧映、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至振峻,卻和暖如春臼疫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扣孟。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工烫堤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凤价。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓鸽斟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親利诺。 傳聞我的和親對象是個殘疾皇子富蓄,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

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

  • 程序調(diào)試的基本思想是“分析現(xiàn)象->假設錯誤原因->產(chǎn)生新的現(xiàn)象去驗證假設”這樣一個循環(huán)過程,根據(jù)現(xiàn)象如何假設錯誤原...
    Manfred_Zone閱讀 16,508評論 0 26
  • 調(diào)試前準備 獲取進程的內(nèi)核轉儲(core dump) why:最大好處是慢逾,其保存了問題發(fā)生時的狀態(tài)立倍。記錄進程當前狀...
    Gitlusen閱讀 920評論 0 2
  • 1灭红、文件和目錄: # cd /home 進入 '/home' 目錄 # cd .. ...
    XDgbh閱讀 1,994評論 0 1
  • 我給你講個笑話,你可別生氣口注。 一條老狗在主人貧貧落落的時候守在主人的身邊变擒。主人過得寒酸,養(yǎng)的狗卻不少疆导,有的叫...
    牧犢閱讀 226評論 0 0
  • 驕陽似火下跑出宿舍拿快遞赁项?買飯?…… 不如躺在床上玩“王者農(nóng)藥”澈段; 不如磕著瓜子看《人名的名義》悠菜; 三江人自己的跑...
    透明高閱讀 2,132評論 0 0