Mac で xv6 を gdb でデバッグする
前回、Mac 上で xv6 を動かしたので、今回は gdb 使ってデバッグしてみます。
gdb のインストール
brew install --with-all-targets gdb
i386 形式のシンボルとか読むために、全ターゲットの gdb をインストールします。
qemu で実行
cd xv6 make qemu-nox-gdb
gdb モードで実行
gdb でアタッチ
cd xv6 gdb
.gdbinit があるので、xv6 ディレクトリで gdb 起動するだけで 良しなにアタッチしてくれます
TUI モード
TUI (Text UI)モードにするには Ctrl+x + Ctrl+a。
TUI モードにすると、コマンド追いながらソースコードを終えてめちゃ便利。
関数にブレークポイント
(gdb) break main
break で関数名にブレークポイントを打ちます。
(gdb) break 24
行数指定で、指定行にブレークポイントをウチます。
continue
(gdb) cont
停止しているプログラムを続行する。
next
(gdb) next
停止しているプログラムの次の1行を実行する。 関数の中まではステップしていかない。
step
(gdb) step
停止しているプログラムの次の1行を実行する。 関数の中までステップしていく
ブレークポイントの削除
(gdb) delete
ブレークポイントを全て削除
変数の中身の表示
(gdb) print 変数
関数の終端まで実行
(gdb) finish
ループを抜ける
(gdb) until
引数の変更があった時に止まる
(gdb) watch 変数
関数の呼び出し元をトレース
(gdb) backtrace
変数の型を知りたい
(gdb) whatis 変数
構造体の定義を参照する
ptype struct 構造体
変数が構造体だった場合、その構造体の定義まで表示される
ptype 変数
ソースコードを表示
(gdb) la src
la は layout の略
アセンブラ表示
(gdb) la asm
レジスタ表示
(gdb) la regs
その他
十字キー上下左右で、ソースコードやアセンブラ表示を移動できる
Ctrl+P, Ctrl+N でコマンド履歴を追うことができる
画面が乱れたら Ctrl+L で直す