囲みコラム

BeOS R3 for Intelでのデバッグ


本書執筆時点のBeOS(Release 3)では、Intel版のCodeWarrior for BeOSにソースレベルデバッガが付属していません。これはCodeWarrior for BeOSの開発作業が遅れたことによるものであり、これ以降のバージョンで改善される予定です。ただし、デバッグ機能を一切利用できないのでは開発に支障をきたすため、Be社ではIntel版のソースレベルデバッガがリリースされるまでの間は、BeOS付属の低レベルデバッガ(db)を使うように指示しています。

ここでは、dbの使い方を簡単に説明します。まず、dbを起動するには、Terminalアプリケーション(hシェル端末)を動かし、デバッグしたいアプリケーションが置かれたディレクトリに移動します。それから、Terminalのプロンプトに対して

$ db <アプリケーション名>

のように入力します。すると、2.3節のdebug_serverの説明で述べた手順でデバッグウィンドウが開かれますので、デバッガ(db)のプロンプトに対してコマンドを入力してデバッグ作業を行います。ただし、dbはアセンブラレベルのデバッガですので、MWDebug-Be.debugのようにソースファイルの内容を見ながらデバッグすることはできません。dbを使ったデバッグには、アセンブラの知識が必要になります。C++やアセンブラに詳しくない場合は、Intel版のソースレベルデバッガがリリースされるまでの対策として、この後に述べるprintf()を使ったデバッグを行うのが現実的なやり方かも知れません。

dbのコマンドのうち、代表的なものを以下に述べます。これ以外のコマンドについては、dbのプロンプトに"help"と入力して表示されるマニュアルを参照して下さい。

■シンボル情報の一覧表示
"svd"と入力すると、アプリケーション内のシンボル情報を一覧表示してくれます。C++のメソッド(メンバ関数)や大域関数について、それぞれの名前とアドレスが表示されます。ここで表示されたアドレスは、ブレークポイントを設定する際、次に述べる"br"コマンドの引数に渡します。

■ブレークポイントの設定
"br <アドレス>"と入力すると、指定したアドレスに対応する命令にブレークポイントが設定されます。C++のメソッドや大域関数の入り口にブレークポイントを設定する場合、まず"svd"コマンドでシンボル情報を表示して対応するアドレスを調べ、そのアドレスを引数として"br"コマンドを実行して下さい。

■実行の再開
"g"と入力すると、その後に設定されているブレークポイントに到達するまで実行を続けます。ブレークポイントに到達すると、アプリケーションの実行を停止してプロンプトを表示します。

■ステップ実行
"s"と入力すると、命令を一つだけ実行して停止します。この命令はアセンブラの一行であり、それぞれがCPUに対する一つの命令に相当します。つまり、C++のプログラムで書いた一行ではありません。BeIDEを使ってオブジェクトファイルを逆アセンブルすれば、C++のソースコードとアセンブラコードの関係をたどることは可能ですが、それにはアセンブラの知識が必要です。

■アプリケーションの強制終了
"exit"と入力すると、デバッグ中のアプリケーションを強制終了します。アプリケーションが終了すると、自動的にデバッグウィンドウが閉じられ、デバッガ(db)も終了します。



Art of BeOS Programming
koga@stprec.co.jp