ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

调试xv6

2022-01-23 21:03:20  阅读:306  来源: 互联网

标签:riscv64 gdbinit auto xv6 gdb 工具 调试


个人站点

个人独立博客站点:https://wzzzx.github.io/
后续考虑以维护独立博客为主。

调试是一个比较麻烦的事情,需要倒腾的东西有点多,而且有些问题我现在也没搞清楚

调试工具

现在已知的调试工具有三种,暂时也还没搞清楚它们之间具体有什么区别。

riscv64-unknown-elf-gdb

在{% post_link 6s081/运行xv6系统 “启动” %} xv6 的一文介绍了 SiFive 有提供一套工具链用来启动系统,在这套工具链里可以找到 riscv64-unknown-elf-gdb 用于调试

gdb-multiarch

官方工具页所提供的工具是 gdb-multiarch。这个可以通过 apt-get 直接安装。此外,在工具页所提供的 GitHub 中可以发现,该仓库所提供的包也是 riscv64-unknown-elf-gdb

riscv64-linux-gnu-gdb

视频中可以看到,老师所使用的调试工具是 riscv64-linux-gnu-gdb,因为前面的工具已经解决了调试问题,所以没有去找这个包的安装方式

.gdbinit 文件

每次开启调试的时候,Makefile 会使用 .gdbinit.tmpl-riscv 生成.gdbinit 文件。从 Makefile 可以看到,会变的地方就是调试端口号。这个文件的用途是用于初始化调试环境,gdb 启动的时候会读取其中的命令并执行。具体可以见帮助文档

疑难杂症

Undefined item: "riscv:rv64"

使用 gdb-multiarch 时会在开头看到这个错误提示,此时通过命令 set architecture 查看当前所支持的所有系统架构,发现并没有 riscv64 的支持,怪不得会有这个错误提示。在 Stack Overflow 上找到的答案说需要将版本升级到 8.3 以上才可以。但是我的系统是 Ubuntu 18.04系统源所支持的最高版本就只有 8.1.1。所以没办法使用这个工具进行调试了。

不知道课程官方为什么推荐这个作为调试工具,可能我哪些地方没有弄对吧

no symbol table is loaded. use the file command

出现这个问题是因为符号没有正确的加载,一开始有怀疑是编译的时候没有使用 -g 这个选项,导致没有把符合表打进去。但是查看 Makefile 后发现,其使用了 -ggdb 这个命令,一样能够将符号表打到可执行文件里。要解决这个问题也很简单,只需要在 gdb 的命令行里输入 file kernel/kernel 就可以把内核的符号加载进来

auto-loading has been declined by your `auto-load safe-path’ set to “$debugdir:$datadir/auto-load”

这个也很奇怪,每次启动的时候都会输出这个警告。后来才意识到,为了出现避免出现一些安全问题gdb 不会再主动的执行任何文件。所以需要在用户目录下声明,xv6 这个仓库的 .gdbinit 文件是安全的

通过 echo add-auto-load-safe-path {PATH}/.gdbinit > ~/.gdbinit 命令即可。其中 {PATH} 换成自己仓库路径即可

这个问题顺带影响了第二个问题。如果没有添加为可信任文件,会导致 gdb 不主动加载内核文件,影响符号解析。

参考

GDB 配置与 .gdbinit 的编写

Security restriction for auto-loading

GDB调试指南1

MIT 6.S081 xv6调试不完全指北

标签:riscv64,gdbinit,auto,xv6,gdb,工具,调试
来源: https://blog.csdn.net/u011675745/article/details/122656997

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有