专业 MySQL 内核开发选手一般会选用 linux gdb 直接调试,对于我们只是想了解 MySQL 怎么工作的同学来说,更加现实的玩法是找一个体验好点的平台和 IDE 进行学习。MySQL 8.0 的 debug 方式和之前版本大同小异,应该来说更加方便,这边记录下。
-
cmake 安装好,使用 homebrew 即可
-
https://github.com/mysql/mysql-server clone MySQL 源代码
-
clone 完毕之后,在 mysql-server 根目录建一个目录 bld
-
进入 bld 执行以下命令,… 表示源代码位置,-G “Xcode” 表示生成 xcode 文件, -DWITH_DEBUG=1 这个选项千万不能忘,否则 debug 找不到行号直接让你看汇编,-DCMAKE_INSTALL_PREFIX 表示编译路径,后面指令是下载 boost
cmake .. -G "Xcode" -DWITH_DEBUG=1 -DCMAKE_INSTALL_PREFIX=绝对路径/mysql-server/bld/install - DDOWNLOAD_BOOST=1 -DWITH_BOOST=绝对路径/mysql-server/bld/install/boost -
编译完成后,你就可以看到 MySQL.xcodeproj 文件,xcode 选择这个文件打开,自动生成 schema
-
选择 ALL_BUILD 并按三角键执行 install , 执行完毕之后会在
bld/runtime_output_directory/Debug目录生成熟悉的应用程序。 -
创建一个 my.cnf 放在应用程序目录下(bld/runtime_output_directory/Debug),内容可以简单些,如下
[mysqld] datadir=绝对路径/mysql-server/bld/runtime_output_directory/data socket=绝对路径/mysql-server/bld/runtime_output_directory/mysql.sock port=33061 -
在命令行,或者在 xcode 中 schema 选择 mysqld, edit schema, 添加如下参数,此处 – initialize 务必放后面,否则失败
--defaults-file=绝对路径/mysql-server/bld/runtime_output_directory/Debug/my.cnf --initialize -
初次初始化因为我们是选择默认系统初始化 root 用户的密码,所以务必记住日志打印出来的密码,重新启动前去掉
--initialize参数,使用 root 登陆后会强制让你重设密码。如果这个密码忘了,参见我另外一篇文章《MySQL 8.0 root密码忘了怎么办》 -
接下来就可以愉快的 debug 了,如果需要 debug 启动初始化过程,可以断点打在
mysqld.cc文件的mysqld_main函数中,如果需要 debug SQL 指令,可以断点打在sql_parse.cc文件的do_command函数中
本文介绍了如何在Mac环境下,利用Xcode进行MySQL 8.0的调试。通过homebrew安装cmake,从GitHub克隆MySQL源代码,设置编译选项后生成Xcode项目。在Xcode中完成编译并安装,配置my.cnf文件,初始化MySQL服务器,并学会设置断点进行debug。

7572

被折叠的 条评论
为什么被折叠?



