「オペレーティングシステムの真実の復元」下位の gdb + bochs デバッグ環境

ビデオによる学習体験の向上:
https://www.bilibili.com/video/BV12z4y177VQ/?vd_source=701807c4f8684b13e922d0a8b116af31

では、gdb デバッグをサポートする bochs 環境を構築しましょう。後のコードはすべて C で書かれているため、コードのロジックを明確にする場合は gdb デバッグが不可欠です。

環境 vmware + deepin-desktop-community-20.8-amd64

最初に他の必要なものをインストールします。

sudo apt install build-essential

sudo apt-get install libghc-x11-dev

sudo apt-get install xorg-dev

ダウンロードhttps://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz

ダウンロード後、仮想マシン内の目的の場所に移動して解凍し、次のコマンドを実行します。tar -zxvf bochs-2.6.8.tar.gz

boch をインストールするための空のディレクトリを作成します

mkdir bochs-gdb

解凍した bochs-2.6.8 フォルダーに移動します。cd bochs-2.6.8

bochs の設定ファイルを設定し (次の -prefix は bochs をインストールするディレクトリです)、コンパイルしてインストールします。

./configure --prefix=/home/rlk/Desktop/bochs-gdb --enable-gdb-stub --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 LDFLAGS='-pthread'

make

make install

bochs がインストールされているディレクトリに入り、コマンド: をcd .. cd bochs-gdb作成し、構成情報を書き留めます ( 、および次のパス情報の最初の部分を独自の bochs インストール パスに変更します)。bochsrc.disktouch bochsrc.diskromimage:romimage:keyboard:

megs : 32

romimage: file=/home/rlk/Desktop/bochs-gdb/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/rlk/Desktop/bochs-gdb/share/bochs/VGABIOS-lgpl-latest

boot: disk

log: bochs.out

mouse:enabled=0
keyboard:keymap=/home/rlk/Desktop/bochs-gdb/share/bochs/keymaps/x11-pc-us.map

ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63

gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0

ブートディスクを作成する

bin/bximage

次に、入力ボックスに次の内容を順番に入力し、いずれかを入力して Enter を 1 回押します。

1

hd

flat

60

hd60M.img

次に、Makefile内で

ASFLAGS両方に-g パラメータを追加するCFLAGSと、生成される .o ファイルにシンボルなどのデバッグ情報が含まれます。ld によって生成された最終的な kernel.bin には、デバッグ情報も含まれています。そして使用します

objcopy --only-keep-debug kernel.bin kernel.sym カーネル イメージを Bochs にロードする前に、GDB が理解できるシンボル テーブル形式をエクスポートします。または、私がやったように Makefile にルールを追加して、すべてのファイルを作成するときにkernel.symファイルが自動的に生成されるようにします。

変更 (メイクフィールド)

HD60M_PATH=/home/rlk/Desktop/bochs-gdb/hd60M.img	#hd60M的路径改成支持GDB调试的bochs环境内的磁盘

ASFLAGS= -f elf -g
CFLAGS= -Wall $(LIB) -c -fno-builtin -W -Wstrict-prototypes -Wmissing-prototypes -m32 -fno-stack-protector -g

.PHONY:mk_dir hd clean build all boot gdb_symbol	#定义了7个伪目标


#生成可以被GDB理解的符号表,用于GDB调试
gdb_symbol:
	objcopy --only-keep-debug $(BUILD_DIR)/kernel.bin $(BUILD_DIR)/kernel.sym

all:mk_dir boot build hd gdb_symbol
#make all 就是依次执行mk_dir build hd gdb_symbol

kernel.bin ファイルをコンパイルして hd60M.img に書き込みます。

bochs 仮想マシンを起動するとbin/bochs -f bochsrc.disk、gdb 接続を待つように求められます。新しいターミナルを開き、「gdb」と入力して gdb を起動します。gdb がない場合は、それをインストールする必要があります。コマンド:sudo apt install gdb

gdb ウィンドウに次のコマンドを入力して、target remote localhost:1234デバッグのために boch に接続します。

次に、次のコマンドを入力して、symbol-file /home/rlk/Desktop/the_truth_of_operationg_system/chapter_12/c/build/kernel.symkernel.bin のシンボル テーブルをロードします。

gdb で C 言語をデバッグできるようになりましたが、gdb でデバッグする方法を自分で学ぶ必要があります。

おすすめ

転載: blog.csdn.net/kanshanxd/article/details/131750520