MySQLソースコード解析ことはじめ

環境

FreeBSD-6.2

準備

MySQLコンパイル


$ cd mysql-5.0.45;
$ CC=gcc CXX=gcc CFLAGS=-g CXXFLAGS=-g ./configure \
--prefix=/home/$USER/mysql \
--localstatedir=/home/$USER/mysql/data \
--libexecdir=/home/$USER/mysql/bin \
--with-mysqld-user=$USER && make -j2;
-gをつけてデバッグ情報を残しておくところが重要です。

できあがるバイナリ

サーバー … sql/mysqld
クライアント … client/mysql

インストール

実行時に「ディレクトリがない」とか怒られるのがメンドクサイのでインストールしておきます。


$ make install;
$ /home/$USER/mysql/bin/mysql_install_db;

デバッグ

GUIデバッガdddインストール
  • ddd


$ sudo pkg_add -r ddd;

    • 依存性高いので色々コッテリ入っていきます。
    • Xクライアントアプリなので、環境変数DISPLAYの設定やXサーバーの用意は別途必要です。
出来上がったバイナリをdddに食わせる


$ ddd sql/mysqld

dddの使い方

起動後、とりあえずまずはmain関数にbreakpointを貼りましょう。その後、Run。でステップ実行とか変数をダブルクリックしてグラフィカル表示などしているうちに感覚がつかめると思います。

  • Step

カレント行を実行する。カレント行が関数であれば関数の中に入ります。

  • Next

カレント行を実行する。カレント行が関数であれば関数の中に入らずに関数全体を実行します。

  • Stepi

マシン語レベルでのstep

  • Nexti

マシン語レベルでのnext

  • Until

for文を抜けます

  • Finish

現在の関数を実行して呼び出し元に戻ります

  • Cont

コンティニュー。次のブレークポイントまで一気にすすみます。

  • Kill

プロセスをkillします

  • Up

自分を呼んだ関数を表示します。表示するだけで、カレント行は変わりません。

  • Down

Upと逆の動作

  • Undo

Undo Nextします

Redo Next。Undoを実行しないと有効になりません。

  • Edit

ファイルを編集します。

  • Make

makeを実行します。