深入理解計算機系統lab1——gdb調試初步

深入理解計算機系統lab1——gdb調試初步

以下僅供最簡單的入門和參考!!!!!!!

安裝Linux環境,並進行簡單程序的編譯和GDB調試

一、安裝linux系統與環境

在這裏插入圖片描述
第一步,在所使用的電腦平臺上安裝linux系統與環境;
下載VM這個虛擬機後,又下載ubantu的32位Linux操作系統,在VM成功創建了Linux環境的虛擬機。

在這裏插入圖片描述

二、在linux系統中使用gcc完成簡單c語言的編譯和執行

第二步,成功在linux系統中使用gcc完成簡單c語言的編譯和執行;
打開終端,vim hello.c進行編輯,編輯完成後按:wq保存並退出,gcc hello.c -o hello編譯生成可執行文件,./hello將結果成功輸出。

1.打開終端,vim hello.c 新建hello.c

在這裏插入圖片描述

2.編輯hello.c

在這裏插入圖片描述

3.保存hello.c並退出

在這裏插入圖片描述

4.gcc編譯,生成可執行文件,執行並查看運行結果

在這裏插入圖片描述

三、GDB進行程序基本的程序調試和反彙編

第三步,使用GDB進行程序基本的程序調試和反彙編。

  1. gcc -g hello.c -o hello 生成可調試文件,gdb hello進入調試界面
    在這裏插入圖片描述

  2. list(l)將代碼全部加載出來
    在這裏插入圖片描述

  3. breakpoint (b) 4(第四行)然後設置斷點 ,並查看info b,添加成功。
    在這裏插入圖片描述

  4. run(r)執行,到斷點處停止。
    在這裏插入圖片描述

  5. disassemble得到彙編代碼。
    在這裏插入圖片描述

實驗補充
四、使用指令新建、編輯、彙編、鏈接彙編語言程序
4.1新建並編輯源代碼

命令:getdit sum.c
說明:gedit是一個GNOME桌面環境下兼容UTF-8的文本編輯器。使用vi或者vim同樣可以實現新建與編輯。
在這裏插入圖片描述
在這裏插入圖片描述

4.2預處理

命令:gcc -E sum.c -o sum.i
說明:預處理時,編譯器會將C源代碼中包含的的頭文件編譯進來
在這裏插入圖片描述
在這裏插入圖片描述

4.3編譯

命令:gcc -S sum.i -o sum.s
說明:gcc首先檢查代碼的規範性,是否有語法錯誤,確定代碼實際要做的工作,讓後將代碼翻譯成彙編語言。
在這裏插入圖片描述
在這裏插入圖片描述

4.4彙編

命令:gcc -c sum.s -o sum.o
說明:gcc進行彙編階段,將編譯階段生成的”.s”文件轉成二進制目標代碼
在這裏插入圖片描述

4.5鏈接

命令:gcc sum.o -o sum.out
說明:鏈接過程將有關的目標文件彼此連接起來,使得所有目標文件成爲一個能夠執行的統一整體。
在這裏插入圖片描述

4.6執行

命令:./sum.out
說明:執行可執行文件,輸出結果
在這裏插入圖片描述

五、能夠使用gdb對彙編語言進行調試

5.1生成彙編代碼

命令:gcc -g sum.c -o sum
說明:使用命令生成可以調試文件
在這裏插入圖片描述

5.2開始調試

命令:gdb sum
說明:使用gdb對生成的可調試文件進行調試
在這裏插入圖片描述

5.3設置新的斷點

命令:breakpoint(b)
說明:設置斷點的命令是break,它通常有如下方式:
break 在進入指定函數時停住
break 在指定行號停住。
break +/-offset 在當前行號的前面或後面的offset行停住。offiset爲自然數。
break filename:linenum 在源文件filename的linenum行處停住。
break … if …可以是上述的參數,condition表示條件,在條件成
立時停住。比如在循環境體中,可以設置break if i=100,表示當i爲100時停住程序。
可以通過info breakpoints [n]命令查看當前斷點信息。
在這裏插入圖片描述

5.4單步執行程序

命令:si/ni
說明:ni/si都是彙編級別的斷點定位。si會進入彙編和C函數內部,ni不會。

5.5查看寄存器

命令:info regs(i r)
說明:命令i r能夠查看所有寄存器的值
在這裏插入圖片描述
執行命令i r後打印出所有寄存器的列表
在這裏插入圖片描述
程序運行到第七行輸出,此時查看寄存器的值,可見eax=9結果正確

5.6查看指定內存內容

命令:examine(x)
說明:x的命令語法如下圖所示
在這裏插入圖片描述

執行命令:x/10x $sp
說明:打印當前棧stack的10個元素
在這裏插入圖片描述
當前棧的第6、7元素對應於a、b的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章