前回FreeDOS上にFreePASCALコンパイラをインストール、吉例Hello worldできました。今回はFreePASCALで生成したオブジェクトプログラムのデバッグを実施。使用するのはみんな大好きGDBです。FreeDOS上にインストールしたFreePASCAL処理系には主だったGNUのツール共が同梱。
※実機動作確認には以下を使用しております。
GNU Binutil御一統が使える
FreeDOS上のFreePASCALのインストールフォルダ(BIN)を覗いてみると、「お馴染みさん」のプログラム多数が存在します。FreeDOS環境のデフォルトではGNU Binutilなどオブジェクト作成の裏側で働くものどもが含まれていないので、FreePASCALのインストールパッケージに含まれているみたいです。Binutilだけでなく、grepとかありがちなコマンド類の一部も含まれています。
このあたり、同様に周辺のツール類一式を同梱しているOpenWatcom処理系と似た対応です。しかし、以下のように差異があります。
-
- OpenWatcom C/C++、ツール類はOpenWatcom独自コマンドが多い、DOSイクステンダ DOS4GW で動作する。
- FreePASCAL、ツール類はGnuコマンドが多い、DOSイクステンダ GO32v2 で動作する。
動作時の環境が異なるので「まざらない」ようにした方が身のためかも知れませぬ。
FreePASCALの場合、フツーにBinutilが使えるので、ディスアセンブルは以下のような感じで objdump が使えます。
> objdump -d debugtst.o > debugtst.lst
FreePASCALのコンパイラ出力、GO32v2用としては80386の命令が吐き出されていることが確認できます。
デバッガにはGDBが使える
FreePASCALはGnuツール依存みたいなので、デバッガにはGDBが使えます。まずデバッグ・ビルドするときのコンパイラスイッチは -g です。この辺 gcc と一緒ね。
サンプルの短いプログラム debugtst.pas の中身と、それを -g オプションつけてコンパイルしているところが以下に。
上記で生成された debugtst.exe をターゲットに、gdbを起動したところが以下に。
上記のバージョンみると、8.0.1なのでかなり古いんでないかい。。。まあ使えるのだから。なお、上記をみるとこのgdb.exeは djgpp処理系ターゲットにビルドされているみたい。お惚け老人は、djgppもそのうちFreeDOS上で実行したいと思っているのですが、MS-DOS上で使えるgcc環境、という理解デス。ホントか?
ちゃんとPascal のソースがリストされとりますなあ。
1か所ブレークポイントをしかけて実行(RUN)してみます。こんな感じ。
指定の8行目でブレークされました。
値は100、SMALLINT型であると。
残りの行の実行を終え、正常終了であります。
FreePASCALに馴染みはなくともGnuツールなのでお楽。ホントか?