从零开始使用Vscode调试XV6
目錄
參考:
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
- 報錯:
看到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
針對makefile:? ?安裝compiledb【git clone https://github.com/nickdiego/compiledb.git】來自動生成compile_commands.json
Cmake的生成方法
- 如果用CMAKE,加上參數DCMAKE_EXPORT_COMPILE_COMMANDS即可生成
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Css3: gradient背景渐变
- 下一篇: mysql date time year