Macで動くVMWare Fusionを使ってLinux Kernelの実行を覗く方法

Macで動くVMWare Fusion2を使ってLinux Kernel2.6の動きを追う方法のメモ.*1

まずvmxファイルに

debugStub.listen.guest32 = "TRUE"

の1行を書き加えます.

http://gyazo.com/e01891843166fb452b9d5f21f7ca5571.png

VMWare Fusionを起動します.このとき上のvmxファイルと同じディレクトリの中に.logで終わるファイルがあるので,その中に書いてあるlistening portを探します.

http://gyazo.com/43ce3409d76460d023279b484abceb46.png

ソースファイルとの対応付けをするためにvmlinuxとカーネルソースコードをもってきます.
http://gyazo.com/4c135dbe822da0e34833eb5e4b149879.png
http://gyazo.com/0371df58c23cabb6cb3351337bb27c49.png

ここでgdbデバッグするのですがMacにもともと入っているgdbはtargetがmac用になっているのでそれをLinux用に変えてコンパイルしたものを使います.

http://gyazo.com/9e2436c6817a342fcf42dde00bd11a5d.png

これで準備完了.CarbonEmacsを立ちあげてM-x cdでLinuxのソースツリーがある場所に移動し,M-x gdbで上のgdbを起動させます.
vmlinuxを読み込ませ,「target remote localhost:(先程のポート番号)」でattachできます.attachした瞬間にVMWare上のLinuxの時が止まるのでおもしろいです.

http://gyazo.com/d14bfc38165c40fe62c10f52f22bd3ba.png

Emacs + VMWareでこんなふうにKernelの動作を追うことができます.
http://gyazo.com/11693f2d5c30cc2abfba695123084e7c.png

ところどころoptimizedされて見えなくなっている変数などがありますが,この方法はかなりおもしろいです.

*1:以前まえださんに教えてもらった