gdbserver

キーワード: CAT845 CAT724 ラズパイ armhf sh4

準備

ツールのインストール

開発PC側(debian jessieの場合)
# apt-get install gdb-multiarch
ターゲット機側
# apt-get install gdb-server
(CAT724, CAT845は内蔵ROMに gdbserverが入っているので必要ない)

コンパイル

コンパイル時に必ず -g オプション付きでビルドしておきます。

例
$ arm-linux-gnueabihf-gcc -O2 -g -Wall led_control.c -o led_control (armhfの場合)
$ sh4-linux-gnu-gcc       -O2 -g -Wall led_control.c -o led_control (sh4の場合)

デバッグの実際

ターゲット機側(CAT724, CAT845, ラズパイ等)

# gdbserver 0.0.0.0:1234 ./led_control
Process ./led_control created; pid = 541
Listening on port 1234

rootユーザ (コマンドプロンプトが # ) でなくても構いません。通信ポートを

相手(gdbを動かすパソコン)IP:ポート番号

と指定します。IPアドレスを 0.0.0.0 でも構いません。この場合は通信相手がワイルドカードになり、誰でも受付okになるので少し危険です。自分の机の上で実験するときに限ればこれでもよいでしょう。

すでに動いているプロセスにアタッチすることもできます。ps ax でPIDを調べて

# gdbserver --attach 0.0.0.0:1234 PID

とします。

gdbserver側が待ち受けに入ります。

開発PC側

実行バイナリ、ソースコードがあるプロジェクトのディレクトリに移動

$ gdb-multiarch     --tui ./led_control            (armhfの場合)
$ sh4-linux-gnu-gdb --tui ./led_control            (sh4の場合)
(gdb) target remote 172.16.1.11:1234

これで接続します。

listを取る
(gdb) l

ブレイクポイント
(gdb) b 関数名

続き continue
(gdb) c

次の行 
(gdb) n

変数の表示
(gdb) p fd

バックトレース
(gdb) bt

デバッグの終了
(gdb) detach
(gdb) quit

関連