前回の記事 の続きの小ネタです。
手順
ビルドを終えてnuttxバイナリが作られたディレクトリに移動します。
まず、QEMUを実行します。
QEMU実行時には -s
と -S
のオプションを用います。
$ qemu-system-riscv32 -s -S -nographic -machine sifive_e -kernel ./nuttx
オプション | 意味 |
---|---|
-s | shorthand for -gdb tcp::1234 |
-S | freeze CPU at startup (use 'c' to start execution) |
-S
を指定したため待ってくれているのでその状態で、別のウィンドウからGDBを実行します。
$ riscv64-unknown-elf-gdb ./nuttx -ex "target remote localhost:1234"
そのときに
Reading symbols from ./nuttx...
というシンボルを読み込んでいる表示が見られるはずです。
ビルド時にデバッグシンボルを含めるには、コンフィグDEBUG_SYMBOLSを有効にする必要があります。
hifive1-revb:nsh
ではデフォルトで有効になっていました。
あとは好きにブレークポイントを設定するなどしてください。
以下は例
(gdb) b nsh_main
Breakpoint 1 at 0x20403972: file nsh_main.c, line 218.
(gdb) c
Continuing.
Breakpoint 1, nsh_main (argc=1, argv=0x80002128) at nsh_main.c:218
218 (void)sched_getparam(0, ¶m);
(gdb)