VMwareのGDB機能を利用する
ゲストOSでVMwareのGDB機能を利用するとkernelのデバッグができるとの事で設定して使ってみた。
ゲストOSのディレクトリにあるvmxファイルに以下を追加する。32ビット ゲストOSの場合は64のところを32にすれば良いはず(まだ試してない)。
debugStub.listen.guest64 = "TRUE"
debugStub.listen.guest64.remote = "TRUE"
debugStub.hideBreakpoints = "TRUE"
monitor.debugOnStartGuest64 = "TRUE"
この設定をしたあと念のためVMwareを一度終了してからゲストOSを起動した。ゲストOSは普通に起動してくる。この状態でホストマシンでgdbを起動してgdbのプロンプトにて
target remote localhost:8864
を入力するとgdbがリモート接続されVMwareのゲストOSは停止状態になる(ゲストOSの画面にでっかいマークが出ます)。32ビット ゲストOSの場合はポート番号が8864ではなく8832になります。
この状態でデバッグ情報の付いたkernelのオブジェクトまたはdebuginfoを読み込めばソースコード上でデバッグができるようになります。停止状態から実効を続けるにはgdbでcontコマンドを実効します。
実際にはkernelのデバッグではなくEFI shellから実効するEFIアプリケーションをデバッグしたかったのですが、このgdbにはrunコマンドを実装されてなくEFIアプリケーションはリロケータブルなのでうまく途中で停止させることができず保留中です。
何か良い方法がないか考え中。