gdbserver を使うことで、SUZAKUのユーザアプリケーションをリモートデバッグすることができます。
以下に、SUZAKU-S上で gdbserverを利用するための手順と、簡単な使い方を説明します。必要なパッチは、1番下の「参照」から取得してください。
動作環境
- SUZAKU-Sシリーズ
- ディストリビューション: uClinux-dist-20051110-suzaku2 以降
gdbserver のビルド
パッチファイルは、このページの一番下の「参照」から取得できます。
1. gdbserver パッチをあてる (uClinux-dist-20051110-suzaku2のみ)
[PC ~]$ tar xzf uClinux-dist-20051110-suzaku2.tar.gz
[PC ~]$ cd uClinux-dist-20051110-suzaku2
[PC ~/uClinux-dist-20051110-suzaku2]$ tar xzf threaded-gdbserver-update.tar.gz
2. 割り込みベクタの変更パッチをあてる (uClinux-dist-20051110-suzaku2のみ)
[PC ~/uClinux-dist-20051110-suzaku2]$ patch -p1 < modify-intv.S-for_SS.patch
3. gdbserver の選択
make menuconfig 等で、gdbserver を選択します。
Kernel/Library/Defaults Selection --->
[*] Customize Vendor/User Settings
Miscellaneous Applications --->
[ ] gdbreplay
[*] gdbserver
[ ] gdbreplay (old)
[ ] gdbserver (old)
4. ビルド
[PC ~/uClinux-dist-20051110-suzaku2]$ make dep all
リモートデバッグ
gdbserver を使った簡単なデバッグ方法を説明します。
詳しくは、gdb のマニュアル等を参照して下さい。
デバッグには、GUIツール、コマンドラインによる方法の2通りが選択できます。
以降の説明例では、次に示す環境および表現を用います。適宜、読みかえて下さい。
- ホスト側
- プロンプト: [PC ]$
- IPアドレス: 192.168.1.1
- ターゲット側
- プロンプト: [SUZAKU ]#
- IPアドレス: 192.168.1.100
- その他
- アプリケーション名: hello
- 使用するポート番号: 1234
- gdbのコマンドプロンプト: (gdb)
なお、ユーザアプリケーションをコンパイルする際、最適化オプション(-O)を無効にすることをお勧めします。
最適化を無効にするには、uClinux-distを使用している場合、 Makefile の上部に以下の指定を追加します。
CFLAGS += -O0
GUIツールによるデバッグ
- SUZAKU上で、gdbserverを起動
[SUZAKU ]# gdbserver 192.168.1.1:1234 /bin/hello
Process /bin/hello created; pid = 53
Listening on port 1234
- ホストPCで gdb を起動
[PC ]$ mb-uclinux-gdb hello.gdb
- 接続設定
gdbが起動したら、GDB起動ウインドウが現れます。
メインメニューから[File]->[Target Settings]を選択し、接続設定を行います。
- Connection
| Target: | Remote/TCP : XMD |
| Hostname: | 192.168.1.100 |
| Port: | 1234 |
- 「Set breakpoint at 'main'」をチェック
- Fewer Options
- 「Attach to Target」をチェック
- 「Continue from Last Stop」をチェック
- 実行
Run アイコン(左端)を押します。または、メインメニューの[Run]->[Run]を選択します。
コマンドラインによるデバッグ
- SUZAKU上で、gdbserverを起動
GUIツールによるデバッグと同じです。
- ホストPCで gdb を起動
[PC ]$ mb-uclinux-gdb -nw hello.gdb
- gdbserver と接続
(gdb) target remoto 192.168.1.100:1234
- ブレークポイントの設定
main関数にブレークポイントを設定する例を示します。
(gdb) break main
- 実行
ステップ実行の例を示します。
(gdb) step
参照
- gdbserver パッチ
- 割込みベクタ 修正パッチ