![SourceForge.net Logo](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_u47FgwVoM2BLG9ibVxecIOFKw8oWh7WHpH7-MvpFpNyONdPggAMFOIwrkWZurDQOCLZHfC-FBFXBD4rxR302K8Fcfh_Vs5Fuz3WWuQds7bY2fSxITh3kkCOqnCV2IpfTfADQ=s0-d)
MinGW クロスコンパイル環境を使った開発を支援するためのツールとして、クロスデバッグ用に Windows 用の GDBserver のインストーラ
gdbserver-6.8.50-003-20090606.exe をリリースしました。
・
[UTIL] GDB簡単な使用例を紹介します。使用するサンプルを、MinGW Cross Compile 環境で
-g オプションをつけてビルドしておきます。ここでは
sample.exe とします。
$ i686-pc-mingw32-gcc -g sample.c -o sample.exe
ビルドしたプログラム
sample.exe を Windows 側にコピーしておきます。
Windows 側(ターゲットプラットフォーム)
まず
gdbserver-6.8.50-003-20090606.exe を、ターゲットプラットフォームである Windows にインストールします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_rcomuZLm5dTt07Q1hSr62su_0mtwWu8BxHf76KeXjVtHCleQwiabl5vDlKjCFEWzfWgy4HiEBHvR4_4bw2wldZRAsLqEUfGMiYoBxCsamEI1knRJutau-NOuT9Vv_FR4j_z9g/s320/gdb-server.png)
コマンドプロンプトを起動し、GDBserver で
sample.exe を起動します。その際、TCP 接続からの情報を listen するホストとポートを指定します。ここでは、ホストに
192.168.11.2 の Linux クロス開発マシン、ポート 60000 を指定しています。
>gdbserver 192.168.11.2:60000 sample.exe
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhayGSSlecgsYftMcd_sTUO-uL1wkw8dngeHOYG1aEA-y8C4BKlg_OH6GLrzxt8_LLF4FBT5InZbQ_bicUwEEn_0PlLQddT7hATvsTjpB2GJVOVhMVI6bG6RBC3tr5Nu3BqoR7c0w/s320/gdb-server1.png)
Linux 側(クロス開発マシン)
クロス開発環境である Linux では、クロスターゲットの GDB、
i686-pc-mingw32-gdb で、ターゲットプラットフォームと同じプログラム
sample.exe を起動します。ソースファイル
sample.c も同じディレクトリに置きます。
$ i686-pc-mingw32-gdb sample.exe
GDB のコンソール上で、ターゲットプラットフォームの GDBserver(Windows の
192.168.11.4、ポート 60000)に接続します。
つぎにプログラムの先頭にブレークポイントを設定し、最初のブレークポイントに達するまで(
run ではなく)
continue でプログラムを走らせます。プログラムはもちろん、ターゲットプラットフォーム上である Windows 上で実行されます。
(gdb) target remote 192.168.11.4:60000
(gdb) break main
(gdb) continue
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1GRqibvYe6dUfp30MvR3WZxnNqV71WJRQWS6oiFUHnTLxbbMOmnFOeJKrrKe4TkdcnAKI5gIjW5H7JnlP75OYiVdv0yisMJj8nK4Z1izeTBliYzXkpN0_zjcWLlfl_yugDoJUvw/s320/gdb-server2.png)
このとき XML サポートを無効にしたという警告が毎回表示されますが、これについては調査中です。
DDD の利用
クロスでバッグに、GUI フロントエンドである DDD,
Data Display Debugger を利用することもできます。DDD は Fedora のパッケージをそのまま利用します。DDD を起動するときに、使用するデバッガを指定するだけです。
$ ddd --debugger i686-pc-mingw32-gdb &
DDD が起動した後、メニューからデバッグするプログラム
sample.exe を読み込み、画面下の (gdb) コンソールで、GDB だけの時と同じように GDBserver に接続し、ブレークポイントを設定して
continue で実行します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjmQkOHCh6W10g7skoPAh4OPyt2v4grmjf95j7I_YrRqHx2lDcbvIOk2jQMNr6kSRJo2YdfkhtmvWGzQdaz3qEPxsjw-vU5R4ZnP05nLIQoyTpVYwwI7OmhQtiNPAg7TK1a4KVAw/s320/gdb-server4.png)
結局のところ GDB のコマンドを知らなければ、DDD を使いこなすことはできませんが、変数の値や、ブレークポイントの位置が視覚的に判るので、気分的には楽にデバッグできるでしょう。
もちろん最終的には Windows 上でプログラムを実行してデバッグをする必要がありますが、Linux 上の wine を利用して、基本的なデバッグを済ませてしまうこともできます。
[1]
Cross Debug on Linux and Wine