深入理解計算機系統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進行程序基本的程序調試和反彙編。
-
gcc -g hello.c -o hello 生成可調試文件,gdb hello進入調試界面
-
list(l)將代碼全部加載出來
-
breakpoint (b) 4(第四行)然後設置斷點 ,並查看info b,添加成功。
-
run(r)執行,到斷點處停止。
-
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的值