CSE 306: Tools
Familiarity with your environment is crucial for productive
development and debugging. This page gives a brief overview of the
JOS environment and useful GDB and QEMU commands. Don't take our word
for it, though. Read the GDB and QEMU manuals. These are powerful
tools that are worth knowing how to use.
All of the tools that you need to execute and complete the labs are
installed in your course virtual machine. Details TBA.
If you wish to compile and run the tools on your own machine, t
any standard Linux development environment should work.
Note that we cannot guarantee
that these tools will run on your computer, and we cannot support these
tools on your own computer.
Reference
GDB
See the GDB
manual for a full guide to GDB commands. Here are some
particularly useful commands for 306, some of which don't typically
come up outside of OS development.
- Ctrl-c
- Halt the machine and break in to GDB at the current
instruction. If QEMU has multiple virtual CPUs, this halts all of
them.
- c (or continue)
- Continue execution until the next breakpoint or Ctrl-c.
- si (or stepi)
- Execute one machine instruction.
- b function or b file:line (or
breakpoint)
- Set a breakpoint at the given function or line.
- b *addr (or breakpoint)
- Set a breakpoint at the EIP addr.
- set print pretty
- Enable pretty-printing of arrays and structs.
- info registers
- Print the general purpose registers, eip,
eflags, and the segment selectors. For a much more
thorough dump of the machine register state, see QEMU's own info
registers command.
- x/Nx addr
- Display a hex dump of N words starting at virtual address
addr. If N is omitted, it defaults to 1. addr
can be any expression.
- x/Ni addr
- Display the N assembly instructions starting at
addr. Using $eip as addr will display the
instructions at the current instruction pointer.
- symbol-file file
- Switch to symbol file file. When GDB attaches
to QEMU, it has no notion of the process boundaries within the
virtual machine, so we have to tell it which symbols to use. By
default, we configure GDB to use the kernel symbol file,
obj/kern/kernel. If the machine is running user code, say
hello.c, you can switch to the hello symbol file using
symbol-file obj/user/hello.
Last updated: 2025-04-11 20:18:40 -0400
[validate xhtml]