清华大学 ucore-lab0 MacOS

因为在虚拟机上进行开发过于卡顿,所以选择在 MacOS 上搭建实验环境。

在 MacOS 上搭建实验环境

brew update
brew install qemu
  • step3: 安装 i386-elf-gcc
    这里有很多坑,网上普遍的做法是 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"
  • step4: 安装 i386-elf-gdb(我使用的是gdb,可以使用)
brew install i386-elf-gdb
  • step5: 测试
    进入 lab1_result 进行 make clean 然后 make 看一下是否有报错。

编译调试程序

  • step1: make gdb启动 qemu
ifndef 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
  • step2: 编写 gdb 初始化脚本,clone 下来的代码已经帮我们编写好了,在 tools/gdbinit 中
file obj/bootblock.o
target remote :1234
break bootmain
continue
  • step3: gdb -x tools/gdbinit

GDB 常用命令

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

参考文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值