9.1. デバッグ方法#
9.1.1. デバッグ用ビルド方法#
デバッグ用にビルドすることにより、GDB上でのシンボル解決など開発時に得られる情報が多くなります。そのため、開発時はデバッグ用にMySQLとMroongaをビルドします。
注釈
片方だけデバッグ用ビルドにすると構造体のサイズなどが異なってしまうため、Mroongaがロードできなかったり、実行時にassertに引っかかったりしてうまく動作しません。
9.1.1.1. MySQLのデバッグ用ビルド方法#
MySQL :: 2.9.4 標準ソース配布を使用して MySQL をインストールするにある通り、CMakeのオプションに-DWITH_DEBUG=ON
オプションを渡すことでデバッグ用にビルドすることができます。
ダウンロードからビルドまでの流れは以下の通りです。
$ mkdir -p ~/work/
$ cd ~/work/
$ wget https://cdn.mysql.com/Downloads/MySQL-8.4/mysql-8.4.2.tar.gz
$ tar xf mysql-8.4.2.tar.gz
$ cmake \
-Smysql-8.4.2 \
-Bmysql-8.4.2.build \
-GNinja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/tmp/local \
-DWITH_DEBUG=ON
$ cmake --build mysql-8.4.2.build
9.1.1.2. MariaDBのデバッグ用ビルド方法#
MySQLの代わりにMariaDBを使いたい場合でも、-DWITH_DEBUG=ON
を使えます。
MariaDBをビルドする前にstorage/mroonga/
(MariaDBにバンドルされているMroonga)を削除しなければいけないことに注意してください。
ダウンロードからビルドまでの流れは以下の通りです。
$ mkdir -p ~/work/
$ cd ~/work/
$ wget https://downloads.mariadb.org/rest-api/mariadb/11.4.3/mariadb-11.4.3.tar.gz
$ tar xf mariadb-11.4.3.tar.gz
$ rm -rf mariadb-11.4.3/storage/mroonga
$ cmake \
-Smariadb-11.4.3 \
-Bmariadb-11.4.3.build \
-GNinja \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/tmp/local \
-DWITH_DEBUG=ON
$ cmake --build mariadb-11.4.3.build
9.1.1.3. Mroongaのデバッグ用ビルド方法#
MroongaはCMakeのオプションに--preset=debug
を渡すことでデバッグ用にビルドすることができます。
リポジトリのcloneからビルドまでの流れは以下の通りです。
$ cd ~/work/
$ git clone git@github.com:mroonga/mroonga.git
$ cmake \
-Smroonga \
-Bmroonga.mysql-8.4 \
--preset=debug \
-DCMAKE_INSTALL_PREFIX=/tmp/local \
-DMYSQL_BUILD_DIR=$HOME/work/mysql-8.4.2.build \
-DMYSQL_CONFIG=$HOME/work/mysql-8.4.2.build/scripts/mysql_config \
-DMYSQL_SOURCE_DIR=$HOME/work/mysql-8.4.2
$ cmake --build mroonga.mysql-8.4
無事にビルドができたら以下のようにテストを実行してください。すべてのテストが[pass]
になればデバッグ用ビルドは成功しています。
$ cd mroonga.mysql-8.4
$ ../mroonga/test/run-sql-test.sh
9.1.2. run-sql-test.sh
を使いこなす#
run-sql-test.sh
はデバッグの友。ここでは、その便利な使い方の一例をご紹介します。
9.1.2.1. 指定したテストを実行する#
何もオプションを渡さずにrun-sql-test.sh
を実行するとmysql-test/mroonga
以下にある全てのテスト(*.test
)が実行されてしまいます。
特定のテストだけを実行したい、という場合は次のようにしてテストを指定します。
$ ../mroonga/test/run-sql-test.sh ../mroonga/mysql-test/mroonga/storage/t/truncate.test
9.1.2.2. トレースを見る#
次のようにして--debug
オプションをつけてテストを実行すると、関数の呼び出しなどが記録されます。
$ ../mroonga/test/run-sql-test.sh --debug ../mroonga/mysql-test/mroonga/storage/t/truncate.test
この呼び出しは${MySQLのビルドディレクトリ}/mysql-test/var/log/mysqld.1.trace
に格納されます。
新しくメソッドを作成した場合はMRN_DBUG_ENTER_METHOD()
/DBUG_RETURN()
をメソッドの先頭/末尾に配置し、関数の呼び出しを記録するようにするとよいでしょう。
9.1.2.3. GDB を立ち上げる#
--manual-gdb
オプションを指定することで、テストを実行する際にGDBを用いてデバッグをできます。
$ ../mroonga/test/run-sql-test.sh --manual-gdb ../mroonga/mysql-test/mroonga/storage/t/truncate.test
このために別のターミナルでgdb
を実行する必要があります。gdb
を実行するためのコマンドラインはrun-sql-test.sh
が表示します。