Image: DOSBox内蔵デバッガーの使い方

DOSBoxの内蔵デバッガーは通常ビルドでは無効にされている。gccならビルド時に.configure --enable-debugを実行する。VC++なら「構成プロパティ」→「C/C++」→「プリプロセッサ」でC_DEBUGを定義するか、config.hを書き換える。

DOSBox実行中にメインウィンドウでAlt+Pauseキーを押すとデバッグモードへ移行する。通常ビルドのDOSBoxからmapper.txtを持ち越している場合、デバッガー起動イベントに対してキーが割り当てられていないので、Ctrl+Alt+1キーを押して「Debugger」のキーバインドを確認する。

デバッグウィンドウの操作キーは以下の通り。

  • F3/F4 - ヒストリー(過去に実行したコマンドの呼び出し)の前のコマンド
  • F4/F7 - ヒストリーの次のコマンド
  • F5 - 実行/中断しているプログラムを続行
  • F8 - データビューの文字表示を切り替える
  • F9 - カーソル行にブレークポイントを設定/解除
  • F10/F11 - ステップオーバー/ステップイン
  • ALT + D/E/S/X/B - データビューのアドレスをDS:SI/ES:SI/SS:SP/DS:DX/ES:BXに変更する。
  • Esc - 入力を消去する。
  • ↑/↓ - コードビューのカーソル移動
  • Page Up/Down - データビューをスクロールする
  • Home/End - ログメッセージをスクロールする

デバッグウィンドウで使用できるコマンドは以下の通り。

  • BP [セグメント]:[オフセット] - ブレークポイントを設定する。
  • BPINT [割込番号] - 割り込みにブレークポイントを設定する。
  • BPINT [割込番号] [AH] - 指定のAHの割り込みにブレークポイントを設定する。
  • BPINT [割込番号] [AH] [AL] - 指定のAHとALの割り込みにブレークポイントを設定する。
  • BPLIST - 設定しているブレークポイントの一覧を表示する。
  • BPDEL [番号] - ブレークポイントを解除する。
  • C / D [セグメント]:[オフセット] - コード・データ表示のアドレスを変更する。
  • DOS MCBS - メモリーコントロールブロックを表示する。
  • INT [割込番号] / INTT [割込番号] - 割り込みを実行/ステップ実行する。
  • SR [レジスタ] [値] - レジスタに値を設定する。
  • SM [セグメント]:[オフセット] [値] [..] - メモリに値を設定する。
  • IV [セグメント]:[オフセット] [名前] - メモリアドレスに変数名を作成する。
  • SV [ファイル名] - 変数名の一覧をファイルに保存する。
  • LV [ファイル名] - 変数名の一覧をファイルから読み込む。
  • ADDLOG [メッセージ] - ログファイルにメッセージを追加する。
  • MEMDUMP [セグメント]:[オフセット] [長さ] - メモリの内容をファイル memdump.txt に書き込む。
  • MEMDUMPBIN [セグメント]:[オフセット] [長さ] - メモリの内容をファイル memdump.bin に書き込む。
  • SELINFO [セグメント名] - セレクター情報を表示する。
  • INTVEC [ファイル名] - 割り込みベクタテーブルをファイルに書き込む。
  • INTHAND [割込番号] - 割り込みハンドラにコードビューを設定する。
  • CPU - CPUステータス情報を表示する。
  • GDT - GDTのディスクリプタ一覧を表示する。
  • LDT - LDTのディスクリプタ一覧を表示する。
  • IDT - IDTのディスクリプタ一覧を表示する。
  • PAGING [ページ] - ページテーブルの内容を表示する。
  • EXTEND - 追加情報表示に切り替える。
  • TIMERIRQ - システムタイマーを有効にする。
  • HELP - ヘルプ

例えば、あるアプリケーションのDOSバージョンチェック(Int 21h, AH=30h)について調査するには、アプリケーションの実行前にデバッグモードに入り、BPINT 21 30を実行して割り込みにブレークポイントを設定してからF5キーで再開する。

アプリケーションを実行するとInt 21 (AH=30h) が実行される時にブレークが掛かるので、コードビューでその後のコードを追いかける。たいていは直後にcmp al,xxという命令があって、そこからこのアプリケーションはxx以上のバージョン番号を要求しているのだと分かる。F10/F11キーを押せば命令をステップ実行し、F5キーを押せばデバッグモードから外れてプログラムの実行を再開する。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい.