2009-06-07

MinGW クロスデバッグ

SourceForge.net Logo

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 件のコメント: