
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 にインストールします。

コマンドプロンプトを起動し、GDBserver で sample.exe を起動します。その際、TCP 接続からの情報を listen するホストとポートを指定します。ここでは、ホストに 192.168.11.2 の Linux クロス開発マシン、ポート 60000 を指定しています。
>gdbserver 192.168.11.2:60000 sample.exe

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

このとき XML サポートを無効にしたという警告が毎回表示されますが、これについては調査中です。
DDD の利用
クロスでバッグに、GUI フロントエンドである DDD, Data Display Debugger を利用することもできます。DDD は Fedora のパッケージをそのまま利用します。DDD を起動するときに、使用するデバッガを指定するだけです。
$ ddd --debugger i686-pc-mingw32-gdb &
DDD が起動した後、メニューからデバッグするプログラム sample.exe を読み込み、画面下の (gdb) コンソールで、GDB だけの時と同じように GDBserver に接続し、ブレークポイントを設定して continue で実行します。

結局のところ GDB のコマンドを知らなければ、DDD を使いこなすことはできませんが、変数の値や、ブレークポイントの位置が視覚的に判るので、気分的には楽にデバッグできるでしょう。
もちろん最終的には Windows 上でプログラムを実行してデバッグをする必要がありますが、Linux 上の wine を利用して、基本的なデバッグを済ませてしまうこともできます。
[1] Cross Debug on Linux and Wine
0 件のコメント:
コメントを投稿