y's memo

旅と技術のメモ

VMwareのGDB機能を利用する

ゲストOSでVMwareGDB機能を利用すると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アプリケーションはリロケータブルなのでうまく途中で停止させることができず保留中です。

何か良い方法がないか考え中。