Xv6调试指南

xv6调试指南

  1. make clean && make qemu-gdb

  2. 注意这里打开的TCP端口是26000。另开一个Terminal窗口,切到xv6-labs-2020目录下,切到util分支,执行riscv64-unknown-elf-gdb kernel/kernel

  3. target remote localhost:26000

不过也可以按如下操作简化:在~目录下新建.gdbinit文件内容为:

add-auto-load-safe-path ~/xv6-labs-2020/.gdbinit

其中~改为自己的xv6-labs-2020目录所在路径。仍返回xv6-labs-2020目录util分支,执行

riscv64-unknown-elf-gdb

在(gdb)环境中执行

(gdb) b exec

显示

Breakpoint 1 at 0x80004b0c: file kernel/exec.c, line 14.

然后执行

(gdb) c c是continue的缩写,也可缩写为co或cont。显示

Continuing.
[Switching to Thread 1.3]

Thread 3 hit Breakpoint 1, exec (path=path@entry=0x3fffffdf00 "/init", 
    argv=argv@entry=0x3fffffde00) at kernel/exec.c:14
14    {

另一个窗口中显示

xv6 kernel is booting`

`hart 1 starting`
`hart 2 starting

再执行c,显示

Continuing.`
`[Switching to Thread 1.1]`

`Thread 1 hit Breakpoint 1, exec (path=path@entry=0x3fffffbf00 "sh",` 
    `argv=argv@entry=0x3fffffbe00) at kernel/exec.c:14`
`14    {

另一个窗口显示

init: starting sh

再执行c,显示

Continuing.

另一个窗口显示

$

如果想调试特定的文件比如xargs.c,则在一开始启动gdb后执行

(gdb) file user/_xargs
(gdb) b main
(gdb) c