低レベルなヒトの覚え書き

●余談、のようなもの


5. LSI-Cで作成したプログラムのデバッグ: Turbo Debuggerなんか使ってみる

註: ここでいう「LSI-C」とは「LSI C-86 Ver 3.30c 試食版」、「BCC32」とは「Borland C++ Compiler 5.5.1(無料版)」のことです。

(1) イントロ

コンピュータのプログラムには、バグがつきものです。 ここでは、LSI-Cで作成したプログラムのデバッグの方法について検討します。

(2) SYMDEBとかDEBUGとか

LSI-Cに添付されているマニュアルを読むと、lcc.exeの「-g」オプションのところに、SYMDEBを利用したデバッグについての言及があります。
SYMDEBというのは、MS-DOSの開発ツールのひとつです。 もともとが有料の商品だったこともあり、今では入手困難かもしれません。
Win9x付属のDOS外部コマンドには、SYMDEBの前身と同じ名前のDEBUGというソフトが含まれていますが、いずれにしても、アセンブリ言語やなんかの知識を必要とするので、筆者のような低レベル者には無縁の代物です。

註: SYMDEBと同様の機能を持つフリーソフトなんてのもあるようです。 SYMDEB自体は、PC-98用のMS-DOSには、ver.3.3あたりまでは標準添付されていました(ほかにもLINKやEXE2BINが入っていて、そのくせMASMは入っておらず、素人から見ると意味不明でした)。

(3) LSI-CのPROF.EXE

LSI-Cのパッケージに含まれているPROF.EXEを利用すると、直前に実行したプログラムのどの部分が何回実行されたのか、ソースを参照する形で知ることができます(マニュアルの第6章)。
このツールは、実際に行なわれた処理の流れを大まかに把握するうえでは、それなりに役立ちます。 しかし、どうしてそういう流れになったのかは、人間の側で想像するしかありません。

(4) 人力トレース

表題は、筆者が今さっき思いついた、いいかげんな造語です。 要するに、ソースの一部に手を加えて、プログラムの節目節目に変数の内容を表示させたりするやり方のことです。
手間はかかるものの、実際に起きたことを知るためには、もっとも確実な方法だと思います。

(5) Turbo Debugger

商品として売られているプログラミング言語のパッケージには、しばしば、統合環境などと呼ばれるツールが付属しています。 簡単にいうと、プログラミングの作業を楽にするためのさまざまな機能を備えたエディタのようなものです。 オリジナルのソースには手を加えることなく、上記の人力トレースと同様のことが実行できるようになっていたりします。
Turbo Debuggerとは、そうした統合環境のなかからデバッグに関する機能だけを抜き出したような製品で、もともとはBorland社の商品(の一部)だったものです。
現在は、BCC32に対応した32ビット版が無料で配布されています。

※旧Borland関係のURLは別の項目にまとめましたので、そちら (v-clmn7.htm) を参照してください。

別のところ (v-clmn2.htm) でも述べたように、LSI-Cは、プログラマーのミスに妙に寛容なところがあります。 見過ごされているバグを洗い出すためには、同じソースを別のコンパイラで処理してみることが、ひとつの有効な手段となります。 その際、もしもBCC32を使うのであれば、ついでにTurbo Debuggerを利用することで、面倒なデバッグ作業が少しは楽になるはずです。

(6) Turbo Debuggerの基本的な使い方

Turbo Debugger(以下、TD32)を使用するにあたっては、あらかじめ、デバッグしたいプログラムのソースをBCC32でコンパイルしておく必要があります。 その際、「-v」オプションをつけておくと、TD32上でソースを参照しながら作業を進めることができます(デバッグが完了したら、「-v」オプションを外してコンパイルし直す)。

TD32は、DOS窓で実行するタイプのソフトウェアです。 とはいえ、DOSソフトなりのGUIを備えており、「ALT+頭文字」でメニューを引き出すという、一般のWindowsソフトと同様の操作方法が採用されています(マウスも使用可)。
メニューなどの説明は、一部の例外を除き、英語で記述されています。 「Options」→「Display options」のウィンドウで、「Quick reference」の項目を「Japanese」に設定すると、画面の最下行に表示されるガイドメッセージが日本語になります。

註: この辺の設定は、「Options」→「Save options」で保存できそうに思うのですが、筆者のところでは、なぜかうまくいきません。

デバッグの対象とするプログラムは、起動時にコマンドライン引数で指定するか、起動後に「File」→「Open」で指定します。
プログラムを実行するにあたって、引数を設定したい場合は、「Run」→「Arguments...」。
プログラムを実行するには、「Run」→「Run」、もしくはF9キー押下。
プログラムを1行ずつ実行するには、「Run」→「Trace into」、もしくはF7キーを押します。
ほかにもさまざまな機能がありますが、その辺は必要に応じて、自分で調べてみてください(筆者自身があまりよくわかってない)。

→トップ


R.2: 2009/11/25
Copyright (C) 2005,2006,2009 A.Satoshi