因为在虚拟机上进行开发过于卡顿,所以选择在 MacOS 上搭建实验环境。
brew update
brew install qemu
brew tap 第三方库
,然后 brew install i386-elf-gcc
。但是因为现在那些仓库已经将 i386 改为 x64,所以下载下来后 make 仍然使用不了。所以这里只能使用 macports 进行安装。sudo port -v selfupdate sudo port install i386-elf-gcc
然后在 ~/.bash_profile 中添加下面两行
export PREFIX=/opt/local
export PATH="$PREFIX/bin:$PATH"
brew install i386-elf-gdb
make clean
然后 make
看一下是否有报错。make gdb
启动 qemuifndef QEMU
QEMU := $(shell if which qemu-system-i386 > /dev/null; \
then echo 'qemu-system-i386'; exit; \
elif which i386-elf-qemu > /dev/null; \
then echo 'i386-elf-qemu'; exit; \
else \
echo "***" 1>&2; \
echo "*** Error: Couldn't find a working QEMU executable." 1>&2; \
echo "*** Is the directory containing the qemu binary in your PATH" 1>&2; \
echo "***" 1>&2; exit 1; fi)
endif
UCOREIMG := $(call totarget,ucore.img)
gdb: $(UCOREIMG)
$(V)$(QEMU) -S -s -parallel stdio -hda $< -serial null
file obj/bootblock.o
target remote :1234
break bootmain
continue
gdb -x tools/gdbinit
break FILENAME:NUM 在特定源文件特定行上设置断点
clear FILENAME:NUM 删除设置在特定源文件特定行上的断点
run 运行调试程序
step 单步执行调试程序,不会直接执行函数
next 单步执行调试程序,会直接执行函数
backtrace 显示所有的调用栈帧。该命令可用来显示函数的调用顺序
where continue 继续执行正在调试的程序
display EXPR 每次程序停止后显示表达式的值,表达式由程序定义的变量组成
file FILENAME 装载指定的可执行文件进行调试
help CMDNAME 显示指定调试命令的帮助信息
info break 显示当前断点列表,包括到达断点处的次数等
info files 显示被调试文件的详细信息
info func 显示被调试程序的所有函数名称
info prog 显示被调试程序的执行状态
info local 显示被调试程序当前函数中的局部变量信息
info var 显示被调试程序的所有全局和静态变量名称
kill 终止正在被调试的程序
list 显示被调试程序的源代码
quit 退出 gdb