操作系统:本人采用的操作系统版本为Ubuntu 20.04.2 LTS
# 进入wsl系统
$ wslfetch
实验代码xv6-labs-2020
gdb调试工具gbd-multiarch
, 该工具可通过命令sudo agt-get install gdb-multiarch
下载。
$ sudo agt-get install gdb-multiarch
$ gdb-multiarch --version
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
首先进入文件夹xv6-labs-2020
,启动xv6系统。
$ cd xv6-labs-2020
$ make CPUS=1 qemu-gdb
其次,启动gdb调试工具。
$ cd xv6-labs-2020
$ gdb-multiarch
显示如下:
按照提示,在/home/xxx/.gdbinit
文件中添加如下内容:
add-auto-load-safe-path /home/lwl/project/mit6s081/xv6-labs-2020/.gdbinit
再次执行gdb-muliarch
,显示如下即可:
调试内核:gdb-multiarch的窗口输入如下命令:
(gdb) b _entry # 在entry处加上断点
(gdb) info address _entry # 查看entry的地址
0x80000000
(gdb) b main # 在kernel的main函数上加断点
(gdb) b userinit # 在userinit函数上加断点
(gdb) c # 让系统跑起来,此时可以开始调试了
(gdb) layout split # 将gdb的窗口划分为多个,方便查看代码和指令
调试工具类可执行文件:在gdb中输入如下命令
(gdb) file user/_usertests # 还可以类似于user/_xargs等
(gdb) b main
(gdb) c
# 此时,待内核代码启动完成之后,输入usertests命令,便可以在调试窗口进行调试。
gdb的layout命令可以在调试时查看源码,寄存器,以及汇编代码。常用的指令如下:
指令 | 用途 |
---|---|
layout src | 显示源代码窗口 |
layout asm | 显示汇编窗口 |
layout regs | 显示寄存器窗口 |
layout split | 显示源代码窗口和寄存器窗口 |
layout next | 显示下一个layout |
layout pre | 显示前一个layout |
Ctrl + L | 刷新当前窗口 |
Ctrl + x,再按1 | 单窗口模式,显示一个窗口 |
Ctrl + x,再按2 | 双窗口模式,显示两个窗口 |
Ctrl + x,再按a | 回到执行layout之前的普通窗口 |
https://zhuanlan.zhihu.com/p/466424852