目录

参考:

0.系统要求:

1.下载源码

下载源码

看到shell即代表ok

退出方法

2.compile_commands.json生成:便于调试

makefile的生成方法:安装compiledbhttps://github.com/nickdiego/compiledb.git

Cmake的生成方法

3. xv6的Makefile修改

关于  .gdbinit

4. 调试内核

开两个Terminal

此时,在xv6-riscv目录下,执行make qemu-gdb ,进程会阻塞.

配置.gdbinit让其在gdb启动的时候生效

5. 在vscode调试

配置tasks.json--->Terminal--->configure default build tasak

配置launch.json[用于调试]

如果一切顺利:将会这样


从零开始使用Vscode调试XV6 - 知乎

https://github.com/Aneureka/xv6-riscv

书籍介紹 | xv6 中文文档

Chapter 1: Operating System Interfaces - 知乎

0.系统要求:

一天时间的教训---系统要ubuntu20.04的 ,用ubuntu18.04的搞了一天

1.下载源码

学习资源:Xv6 代码导读 (调试工具配置;调试系统调用执行) [南京大学2022操作系统-P18]_哔哩哔哩_bilibili

下载源码

  • git clone https://github.com/mit-pdos/xv6-riscv.git
  • cd xv6-riscv
  • 安装依赖

sudo apt install binutils-riscv64-linux-gnu
sudo apt install gcc-riscv64-linux-gnu
sudo apt install gdb-multiarch
sudo apt install qemu-system-misc u-boot-qemu qemu-utils

  • 报错:
a725@ubuntu:~/Desktop/xv6/xv6-riscv$ make qemu
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 1 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
make: qemu-system-riscv64: Command not found
Makefile:164: recipe for target 'qemu' failed
make: *** [qemu] Error 127
解决方案:249  wget https://download.qemu.org/qemu-5.1.0.tar.xz251  tar -xvf qemu-5.1.0.tar.xz 253  cd qemu-5.1.0/275  ./configure --target-list=riscv64-softmmu,riscv64-linux-user276  sudo make -j8277  sudo make install然后终端 输入 qemu-system-risv6 --version能打印即算ok

看到shell即代表ok

a725@ubuntu:~/Desktop/xv6/xv6-riscv$ make qemu
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 1 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0xv6 kernel is bootinginit: starting sh
$ ls
.              1 1 1024
..             1 1 1024
README         2 2 2226
cat            2 3 23896
echo           2 4 22720
forktest       2 5 13016
grep           2 6 27256
init           2 7 23816
kill           2 8 22696
ln             2 9 22648
ls             2 10 26144
mkdir          2 11 22800
rm             2 12 22784
sh             2 13 41792
stressfs       2 14 23792
usertests      2 15 156240
grind          2 16 37992
wc             2 17 25000
zombie         2 18 22168
console        3 19 0
$

退出方法

在 xv6 中按 Ctrl + a ,然后按 x 即可退出 xv6 系统。

2.compile_commands.json生成:便于调试

makefile的生成方法:安装compiledbhttps://github.com/nickdiego/compiledb.git

  1. 针对makefile:   安装compiledb【git clone https://github.com/nickdiego/compiledb.git】来自动生成compile_commands.json

  2. sudo python3 setup.py install
  3. sh-completion/compiledb.bash文件的内容添加到.bashrc文件中。
  4. 然后在 xv6目录下 compiledb make 即可 ,可看到生成的 compile_commands.json

Cmake的生成方法

  • 如果用CMAKE,加上参数DCMAKE_EXPORT_COMPILE_COMMANDS即可生成
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=True ..

3. xv6的Makefile修改

  • 修改xv6文件夹的Makefie 的 -smp 为1 便于调试
  • 看Makefile来理解整个kernel的编译过程

make | less 或者 make | vim -

  • Makefile的宏定义不能定义到 vscode

bear make ,让 vscode的宏生效

关于  .gdbinit

  • gdb里面又gdb intit的配置,避免重复输入命令

4. 调试内核

开两个Terminal

  • 此时,在xv6-riscv目录下,执行make qemu-gdb ,进程会阻塞.

  • 另开一个终端,在xv6-riscv目录下,执行gdb-multiarch kernel/kernel

配置.gdbinit让其在gdb启动的时候生效

按上图红色部分修改

5. 在vscode调试

配置tasks.json--->Terminal--->configure default build tasak


{"version": "2.0.0","tasks": [{"label": "xv6build","type": "shell","isBackground": true,"command": "make qemu-gdb","problemMatcher": [{"pattern": [{"regexp": ".","file": 1,"location": 2,"message": 3}],"background": {"beginsPattern": ".*Now run 'gdb' in another window.","endsPattern": "."}}],"group": {"kind": "build","isDefault": true}}]
}

配置launch.json[用于调试]

注意:由于有 "miDebuggerServerAddress": "127.0.0.1:26000", //所以需要吧.gdbinit 中 target remote xxxx:xx改为

@REM target remote xxxx:xx

// xv6-riscv/.vscode/launch.json
{"version": "0.2.0","configurations": [{"name": "xv6debug","type": "cppdbg","request": "launch","program": "${workspaceFolder}/kernel/kernel","stopAtEntry": true,"cwd": "${workspaceFolder}","miDebuggerServerAddress": "127.0.0.1:26000", //见.gdbinit 中 target remote xxxx:xx"miDebuggerPath": "/usr/bin/gdb-multiarch", // which gdb-multiarch"MIMode": "gdb","preLaunchTask": "xv6build"}]
}

如果一切顺利:将会这样

从零开始使用Vscode调试XV6相关推荐

  1. 【OS xv6】1 万字详解shell源码解析命令(内含wsl+vscode调试xv6教程 文档第一章助读)

    现在前面的 嘻嘻几百年没写文了确实没时间,等搞完毕设可以一起重温重温.最近学os,读源码发现还挺多东西得整理的,尤其途中有必要找资料整理的时候,内容有点多有点乱,写在源码已经显得不现实了.用的vsco ...

  2. 使用VS Code 从零开始开发并调试.NET Core 应用程序

    使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试.上一篇 使用VS Code开发 调试.NET Core 应用程序 得到了大家的支持. 现在为大家带来从零开始教程,让你更好 ...

  3. vscode emmet默认模板_从零开始配置 vscode

    我们在进行开发工作时,选择一个顺手好用的编辑器是必不可免的, 其中 vscode 就是一个很好的选择.它能让你大部分的工作都在编辑器内完成, 大大的提高开发效率~ 概述 vscode 内置了前端相关的 ...

  4. 使用 vscode 调试前端代码

    使用 vscode 调试前端代码 今天我们以webpack项目为基础讲解配置 复制代码 1. 安装插件 Debugger for Chrome 2. 修改 config/index.js 将devto ...

  5. (004)RN开发VSCode调试ReactNative项目

    1. 添加配置文件 点击小蜘蛛后,按第一步.第二步操作即可 接着选择调试平台☑️下面四个.点击OK,会生成一个launch.json文件并打开. 2. 添加断点 接下来,我们回到DEDUG,点击右边的 ...

  6. 使用vscode调试Nodejs

    之前想用vscode调试nodejs,总是不成功,也走很多弯路,现在记录下来. 首先新建一个文件夹,用vscode打开这个文件夹, 用vscode自带的终端执行npm init,输入名称,其他的可不输 ...

  7. ubuntu下vscode调试开发踩过的坑

    最近刚过安装了中文版的ubuntu18.04.1,安装完之后想在ubuntu上安装vscode做c/c++的开发调试,踩了不少坑,在此记录一下,希望大家在这条路上不要再踩同样的坑. 1.安装vscod ...

  8. vscode 调试_如何使用VSCode调试JS?

    更多精彩,请点击上方蓝字关注我们! 序言 做前端开发的朋友经常需要使用Visual Studio Code编辑代码,很多朋友就想在VSCode调试JS代码,下面我们就介绍下如何配置操作. 一.环境准备 ...

  9. VSCode 调试 Egg 完美版 - 进化史 #25

    VSCode 调试 Egg 完美版 - 进化史 #25 背景 VSCode 早期版本,对 Node Cluster 的调试支持一直不是很友好,譬如: 开发期重启进程后,不支持重新 attach. Cl ...

  10. Mac 配置vscode调试PHP

    Mac系统版本:MacOS Mojave  10.14.5 vscode:1.36.0 MacOS Mojave  10.14.5 系统自带 PHP 7.1.23 1.开启php sudo vim / ...

最新文章

  1. Android开源项目SlidingMenu本学习笔记(两)
  2. 趣谈设计模式 | 职责链模式(ChainOfResposibility):请求的转发处理
  3. qt将生成的程序打包在他人电脑上可用
  4. 谈判如何在谈判中_如何避免通过工资谈判把钱留在桌上
  5. 数据挖掘算法之离散化和二元化
  6. matlab矩阵0-1归化,数据标准化归化处理.doc
  7. Unity3D手游开发日记(6) - 适合移动平台的水深处理
  8. Maven 国内镜像
  9. JavaScript - textarea 滚动至顶部或底部
  10. php单击图片刷新验证码,thinkphp点击图片刷新验证码
  11. 如何撰写优秀的谷歌AD广告标题?
  12. 洛谷P4939 Agent2(树状数组差分)
  13. 我不 大冰2017新书pdf免费下载
  14. windows xp 打开文件夹慢的解决
  15. 维诺图(Voronoi Diagram)分析与实现
  16. 中国教育培训机构市场运营状况与投资咨询预测报告2022年版
  17. 基于JSP仓储物资管理系统
  18. APP自动化测试(2)-通过appium打开手机的应用
  19. jd-gui.exe反编译工具百度网盘下载
  20. 因子分析,主成分分析,主因子分析,因子分析函数,极大似然法——数据分析与R语言 Lecture 12

热门文章

  1. java+widthstep,i*step+j*channels+k 以及widthStep大小计算及原理
  2. widthStep、width
  3. 『ExtJS』树 异步加载数据
  4. bulk insert java_oracle bulk Insert 比insert 快不是一点啊.
  5. 吐血推荐HZHControls:我见过最美的Winform控件库
  6. ios 输入法扩展_iOS8、iOS9都可用的原生输入法扩展词库(搜狗词库)
  7. matlab面源模式反扩散参数研究,基于GIS的大气点源污染高斯烟羽扩散模拟研究
  8. 【hadoop权威指南第四版】第四章hadoop的IO【笔记+代码】
  9. 增霸卡传输掉线/无法登录/再次登录时间长
  10. 002649:bootdo项目改造计划