bochs的gdb版本与qemu

392 阅读3分钟

bochs的gdb调试版本编译安装

## 可能需要安装如下工具或者库,提前安装好make,gcc,gdb,最好更新一下包管理工具

sudo apt install build-essential
sudo apt-get install libghc-x11-dev
sudo apt-get install xorg-dev

## 下载bochs,找一个版本下载即可
wget https://sourceforge.net/projects/bochs/files/bochs/2.6.11/bochs-2.6.11.tar.gz

tar -zxvf bochs-2.6.11.tar.gz

## 创建安装目录
mkdir bochs

## 进入到解压的好的bochs-2.6.11内,输入
./configure --prefix=安装目录 --enable-gdb-stub --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 LDFLAGS='-pthread'

## 安装
make
make install

## 安装完成,进入到安装目录内,可以找到bin目录,bin目录下有一个bochs的可执行文件
## 


bochs配置文件与虚拟磁盘的生成,bin目录下有两个文件,一个用于启动bochs,一个用于生成虚拟磁盘

## 进入bin目录,启动bochs
bochs
## 输入4 生成一个配置文件

## 使用boximage生成一个磁盘文件,按照程序提示来即可,或者依次回车,需要输入磁盘大小,一般64MB足够(根据实验需求输入)

生成的磁盘后的程序会提示你如何填写配置,复制这行配置,打开生成的bochs配置文件
配置ata0 且 ioaddr1=0x1f0 的ata0-master,找到并修改为提示的配置(注意路径),如:
	ata0-master: type=disk, path="磁盘文件路径", mode=flat
其他位置磁盘配置也是一样的操作

gdb相关配置,在配置文件内,加入如下配置即可:
gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0

其他配置参考官网或安装目录下的share/doc/bochsrc-sample.txt

windows下使用bochs,不使用自带命令行调试而是使用bochs自带的gui调试界面

display_library: win32,options="gui_debug"

linux下还需要特殊编译然后加入配置也能使用

编译配置

./configure --with-x11 --with-wx --enable-disasm --enable-all-optimizations --enable-readline  --enable-debugger-gui --enable-x86-debugger --enable-a20-pin --enable-fast-function-calls --enable-debugger --prefix=安装目录
display_library: x ,options="gui_debug"

qemu的安装

可以官网下载用,也可以使用包管理工具直接安装

包管理工具安装qemu

apt-get install qemu-system
sudo apt-get install qemu-system

安装好后就可以直接用,-S -s参数,可以让qemu的gdb调试功能开启,默认在1234端口监听连接

qemu-system-i386 \myos.img -S -s

输入GDB后,连接qemu

target remote localhost:1234

调试信息生成

编译时添加 -g 参数保留调试信息

使用如下命令,对对应的bin文件生成调试信息文件

objcopy --only-keep-debug kernel.bin kernel.sym

GDB连接后,指定对应的调试信息文件,调试更加轻松

symbol-file kernel.sym

使用vscode进行gdb调试更简单

同样编译时要保留调试信息,也就是编译时的 -g 参数

在launch.json中写好配置

{
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "调试名称",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/kernel.bin", # bin文件位置
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/src",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerServerAddress": "localhost:1234", # gdb调试端口
        }
    ]
}

运行bochs或者qemu后,选择最左边一栏的运行和调试(或者快捷键ctrl+shift+d,快捷键可能有差异,启动调试的方式有多种),选择对应调试名称,启动调试,就能连接上