ソフトな忘却力(60) FreeDOS、FreePASCAL、GDBでデバッグ

Joseph Halfmoon

前回FreeDOS上にFreePASCALコンパイラをインストール、吉例Hello worldできました。今回はFreePASCALで生成したオブジェクトプログラムのデバッグを実施。使用するのはみんな大好きGDBです。FreeDOS上にインストールしたFreePASCAL処理系には主だったGNUのツール共が同梱。

※「 ソフトな忘却力」投稿順 Index はこちら

※実機動作確認には以下を使用しております。

    •  Windows 11 PC (i5-1235U)
    •  Ubuntu 24.04 LTS on WSL2
    •  QEMU 8.2.2
    •  FreeDOS 1.3
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

上記のディスアセンブルの結果の冒頭部分が以下に。objdump

FreePASCALのコンパイラ出力、GO32v2用としては80386の命令が吐き出されていることが確認できます。

デバッガにはGDBが使える

FreePASCALはGnuツール依存みたいなので、デバッガにはGDBが使えます。まずデバッグ・ビルドするときのコンパイラスイッチは -g です。この辺 gcc と一緒ね。

サンプルの短いプログラム debugtst.pas の中身と、それを -g オプションつけてコンパイルしているところが以下に。fpcCompG

上記で生成された debugtst.exe をターゲットに、gdbを起動したところが以下に。startDebug

上記のバージョンみると、8.0.1なのでかなり古いんでないかい。。。まあ使えるのだから。なお、上記をみるとこのgdb.exeは djgpp処理系ターゲットにビルドされているみたい。お惚け老人は、djgppもそのうちFreeDOS上で実行したいと思っているのですが、MS-DOS上で使えるgcc環境、という理解デス。ホントか?

さてプログラムのソースをリストしたところが以下に。gdbList

ちゃんとPascal のソースがリストされとりますなあ。

1か所ブレークポイントをしかけて実行(RUN)してみます。こんな感じ。breakpoint

指定の8行目でブレークされました。

この時点で変数の値を吟味してみます。printVar

値は100、SMALLINT型であると。

ブレーク以下をContinue.continue

残りの行の実行を終え、正常終了であります。

FreePASCALに馴染みはなくともGnuツールなのでお楽。ホントか?

ソフトな忘却力(59) FreeDOS、FreePASCAL、インストールしてHELLO へ戻る

ソフトな忘却力(61) FreeDOS、Free Pascal、コマンドラインから整数入力 へ進む