• XV6操作系统调试


    环境准备

    1. 操作系统:本人采用的操作系统版本为Ubuntu 20.04.2 LTS

      # 进入wsl系统
      $ wslfetch
      
      • 1
      • 2

      在这里插入图片描述

    2. 实验代码xv6-labs-2020

    3. 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.
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    启动调试

    1. 首先进入文件夹xv6-labs-2020,启动xv6系统。

      $ cd xv6-labs-2020
      $ make CPUS=1 qemu-gdb
      
      • 1
      • 2
    2. 其次,启动gdb调试工具。

      $ cd xv6-labs-2020
      $ gdb-multiarch
      显示如下:
      
      • 1
      • 2
      • 3

      在这里插入图片描述

      按照提示,在/home/xxx/.gdbinit文件中添加如下内容:

      add-auto-load-safe-path /home/lwl/project/mit6s081/xv6-labs-2020/.gdbinit
      
      • 1

      再次执行gdb-muliarch,显示如下即可:
      在这里插入图片描述


    调试步骤

    1. 调试内核: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的窗口划分为多个,方便查看代码和指令
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    2. 调试工具类可执行文件:在gdb中输入如下命令

      (gdb) file user/_usertests # 还可以类似于user/_xargs等
      (gdb) b main
      (gdb) c
      # 此时,待内核代码启动完成之后,输入usertests命令,便可以在调试窗口进行调试。
      
      • 1
      • 2
      • 3
      • 4

      在这里插入图片描述


    gdb layout

    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

  • 相关阅读:
    【HDFS】Quorum-Journal Design;QJM设计文档主干翻译+理解
    git的基础操作
    B. 01 Game【模拟】
    为什么学校互联网专业教的只是出社会都没用?
    XCTF刷题十一道(01)
    神通MPP数据库的跨库查询
    MySQL数据库的创建和基本的查询语句
    用户角色权限、按钮控制功表及返回数据格式
    A6120 Emerson 机箱地震振动监测器
    空和null是两回事
  • 原文地址:https://blog.csdn.net/u014110320/article/details/125911827