MySQL gdb debug

環境は Mac OS X です。

とりあえずダウンロード


まず http://dev.mysql.com/downloads/mysql/ からソースをダウンロードしてきます。
で下記のドロップダウンリストから source code を選択してダウンロード。


.tar.gz 形式の Generic Linux でよいかと。

で、それのダウンロードが終わったら解凍します。

tar zxvf mysql-5.6.11.tar.gz


解凍後、

cd mysql-5.6.11


どこか適当なところに、bin や script が入るディレクトリと、MySQL のデータが入るディレクトリを作っておきます。

mkdir -p $BUILD_DIR/MYSQL_BUILD/MYSQL_DATA


make


gdb で追うため、デバッグオプションを付ける必要があります。
一つ(2つ?)のディレクトリで完結し、それ消したら「はい、さようなら」みたいな状態にしたいので、prefix の指定もします。

MySQL を make する際、最初は Makefile がありません。
別の make を使う必要があります。

brew install cmake


というわけで cmake をインストール。
ついでに、構文解析器の部分も見るため、MySQL に使われている yacc のソースを追えるように、

brew install bison


もやっときます。

で、cmake ですが……ようわかりません。

なのでオプションを見てみます。

cmake . -LH


でオプション一覧。

とりあえず今回は、

cmake -DWITH_DEBUG:BOOL=ON -DMYSQL_DATADIR:PATH=$BUILD_DIR/MYSQL_BUILD/MYSQL_DATA -DCMAKE_INSTALL_PREFIX:PATH=$BUILD_DIR/MYSQL_BUILD


  • WITH_DEBUG デバッグ用 gdb で読める
  • MYSQL_DATADIR データ用のディレクトリ
  • CMAKE_INSTALL_PREFIX make install したときに bin やら script やらが入るディレクトリ

configure はこれでできたので、いつもどおりの

make
make install


MySQL の操作


データベースの初期化から。

$BUILD_DIR/MYSQL_BUILD/scripts/mysql_install_db --basedir=$BUILD_DIR/MYSQL_BUILD



できた my.cnf の中身に
basedir = MYSQL_BUILDへのパス
datadir = MYSQL_BUILD/MYSQL_DATA へのパス
を書き込む。

MySQL のプロセスの実行する。
ちなみに mysqld_safe は SHELL script なので gdb で追えません。

$BUILD_DIR/MYSQL_BUILD/bin/mysqld_safe&


別のコンソールをたちあげて、

./mysql -u root


を実行します。
その中で適当にデータベースとテーブルを作ります。

そして、

ps aux | grep mysql


で mysqld のプロセス番号を探し出し、上の2つとはまた更に別のコンソールで gdb を立ち上げ、その中で

gdb $BUILD_DIR/MYSQL_BUILD/bin/mysqld


(gdb) attach [process number]


でデバッグ開始です。

コメント

このブログの人気の投稿

相互インクルード対策

make error "Circular"

gdb操作