MySQL gdb debug
環境は Mac OS X です。
とりあえずダウンロード
まず http://dev.mysql.com/downloads/mysql/ からソースをダウンロードしてきます。
で下記のドロップダウンリストから source code を選択してダウンロード。
.tar.gz 形式の Generic Linux でよいかと。
で、それのダウンロードが終わったら解凍します。
解凍後、
どこか適当なところに、bin や script が入るディレクトリと、MySQL のデータが入るディレクトリを作っておきます。
make
gdb で追うため、デバッグオプションを付ける必要があります。
一つ(2つ?)のディレクトリで完結し、それ消したら「はい、さようなら」みたいな状態にしたいので、prefix の指定もします。
MySQL を make する際、最初は Makefile がありません。
別の make を使う必要があります。
というわけで cmake をインストール。
ついでに、構文解析器の部分も見るため、MySQL に使われている yacc のソースを追えるように、
もやっときます。
で、cmake ですが……ようわかりません。
なのでオプションを見てみます。
でオプション一覧。
とりあえず今回は、
configure はこれでできたので、いつもどおりの
MySQL の操作
データベースの初期化から。
できた my.cnf の中身に
basedir = MYSQL_BUILDへのパス
datadir = MYSQL_BUILD/MYSQL_DATA へのパス
を書き込む。
MySQL のプロセスの実行する。
ちなみに mysqld_safe は SHELL script なので gdb で追えません。
別のコンソールをたちあげて、
を実行します。
その中で適当にデータベースとテーブルを作ります。
そして、
で mysqld のプロセス番号を探し出し、上の2つとはまた更に別のコンソールで gdb を立ち上げ、その中で
でデバッグ開始です。
とりあえずダウンロード
まず 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]
でデバッグ開始です。
コメント
コメントを投稿