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,快捷键可能有差异,启动调试的方式有多种),选择对应调试名称,启动调试,就能连接上