MySQLにgdbアタッチするメモ
MySQLにgdbアタッチしてソースコードからいろいろ追う方法を教わったので自分メモ。
- gdbアタッチ
gdb -p mysqldのプロセス番号
この時点でmysqldが一時停止される。
- ブレイクポイント
(gdb) b function_name
- mysqld再開
(gdb) c
- ステップ実行
(gdb) n
- 変数確認
(gdb) p 変数名 (gdb) display 変数名
- thread確認
(gdb) thread apply all bt (gdb) frame スレッド番号 (gdb) bt
その他
- innodb_prefixのサーバ変数は
ha_innodb.cc
を見る。あとは変数名をもとに関数のあたりをつける。 print do_command::thd->query_string.string.str
クエリ確認。- ファイルディスクリプター
/proc/プロセス番号/fd
やlsof -p プロセス番号
で確認してstraceで追うstrace -f -e write,open -p プロセス番号 2>&1 | egrep -v 'write\(4[01], '
みたいな。
追記 20190530
MySQL5.7以降ぐらいからクエリ確認方法は
print do_command::thd->m_query_string
文字列が削られる場合はをつける
set print elements 0