Howto

GDB Serverを使う(Armadillo)

gdbserver を使うことによって、Armadilloでイーサネット経由のリモートデバッグをすることができます。

1. gdbと、gdbserver のダウンロード

Armadilloでクロスデバッグを行うには、ARMクロスデバッガと Armadillo上で動く gdbserverが必要です。

ARMクロスデバッガは以下の2つから使用しているOSにあわせてダウンロードしてください。

(参照:[Cygwin上でクロス開発する](/howto/cygwin-a))

Armadillo上で動く gdbserverは、共通です。

以降、Linux環境での作業をベースに説明になりますので、Cygwin環境の方は適時読み替えてください。

2. ダウンロードしたファイルを解凍

arm-linux-gdb.gzと gdbserver.gz は、gzipで圧縮してあります。ホストコンピュータ上で gzip を使い、解凍します。

[PC ~]$ <span class="input">ls</span>
arm-linux-gdb.gz gdbserver.gz
[PC ~]$ <span class="input">gzip -d arm-linux-gdb.gz</span>
[PC ~]$ <span class="input">gzip -d gdbserver.gz</span>
[PC ~]$ <span class="input">ls</span>
arm-linux-gdb gdbserver

3. 転送

伸張した gdbserverを Armadillo に転送します。/usr/binの下に入れておくと便利です。ftp での転送方法は「ftpでファイルを送受信する」を、ルートイメージを変更する場合は「ユーザランドをカスタマイズする」をご覧ください。転送後、ファイルパーミッションを確認してください。

4. 実行

gdbserverの簡単な使い方を説明します。詳しくは gdbのマニュアル等を参照してください。

ここからは

  • 「arm$」を Armadillo上でのプロンプト
  • 「host$」をホストコンピュータ上でのプロンプト
  • 「192.168.1.1」をホストコンピュータの ip
  • 「192.168.1.2」をArmadilloの ip
  • 「9876」をデバッグに使用するポート番号

とします。適時置き換えてください。

まず、Armadillo上で gdbserverを起動します。

[armadillo ~]$ <span class="input">gdbserver 192.168.1.1:9876 /usr/bin/gdbserver</span>
Process /usr/bin/gdbserver created; pid = 267

続いて、hostコンピュータから Armadillo上の gdbserverに接続します。

[PC ~]$ <span class="input">arm-linux-gdb gdbserver</span>
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...
(gdb) <span class="input">target remote 192.168.1.2:9876</span>
0x40002740 in ?? ()

接続に成功している事が gdbserverでも確認できます。

Remote debugging from host 192.168.10.1

ホストコンピュータに戻り、ブレイクポイントをつけて継続実行させます。

(gdb) <span class="input">b main</span>
Breakpoint 1 at 0x20019fc: file server.c, line 67.
(gdb) <span class="input">c</span>
Continuing.

Breakpoint 1, main (argc=1042, argv=0x112) at server.c:67
67      server.c: No such file or directory.
        in server.c
(gdb)