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キーを押せばデバッグモードから外れてプログラムの実行を再開する。
デバッグコンソールの出力はconfファイルに以下のように記述しておくことでログファイルとして書き出すことができる。
[log]
logfile=dosbox.log