概述
mysqld的源码十分的庞大,模块很多,本文讲述如何通过gdb来调试和观察mysqld源码的运行。
下载mysql server源码
- 从这里下载想要调试的mysql server源码
http://downloads.mysql.com/archives.php
下载boost
$ wget http://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.tar.gz
$ tar xzvf boost_1_68_0.tar.gz
编译前的配置
进入源码文件夹,在执行配置命令时添加–with-debug选项
$ cd mysql-8.0.14
$ mkdir build
$ cd build
$ cmake .. -DDOWNLOAD_BOOST=1 -DWITH_DEBUG=1 -DWITH_BOOST=/xxx/mysql-8.0.14/boost_1_68_0/
#若没有其他错误说明成功了,可以编译了
$ make
在编译的时候看到gcc … -g -DDEBUG_ON的选项就说明可以用gdb进行调试
创建配置文件:my.cnf
创建mysql server的配置文件my.cnf,并对其进行配置
$ cp my.cnf /etc/my.cnf
开始调试
$ gdb ./mysqld
$ gdb)b my_net_read # 在给定函数上打断点
$ gdb)n # 执行下一条语句
客户端进行连接
客户端开始连接,并输入命令,此时服务器端输入命令n继续往下执行。可以进行单步调试了。
多进程的调试
若遇到fork调用,说明要生成子进程,此时可以通过设置变量来决定是跟踪子进程还是父进程的运行。
gdb) set follow-fork-mode child
总结
本文讲述如何通过gdb来调试mysql server的源代码,从而来观察mysql server的运行。