Mac 下在 xcode 中 debug MySQL 8.0

阅读更多
专业 MySQL 内核开发选手一般会选用 linux gdb 直接调试,对于我们只是想了解 MySQL 怎么工作的同学来说,更加现实的玩法是找一个体验好点的平台和 IDE 进行学习。MySQL 8.0 的 debug 方式和之前版本大同小异,应该来说更加方便,这边记录下。

1. cmake 安装好,使用 homebrew 即可

2. https://github.com/mysql/mysql-server clone MySQL 源代码

3. clone 完毕之后,在 mysql-server 根目录建一个目录 bld

4. 进入 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


5. 编译完成后,你就可以看到 MySQL.xcodeproj 文件,xcode 选择这个文件打开,自动生成 schema

6. 选择 ALL_BUILD 并按三角键执行 install , 执行完毕之后会在 bld/runtime_output_directory/Debug 目录生成熟悉的应用程序。

7.  创建一个 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


8. 在命令行,或者在 xcode 中 schema 选择 mysqld, edit schema, 添加如下参数,此处 -- initialize 务必放后面,否则失败

引用
--defaults-file=绝对路径/mysql-server/bld/runtime_output_directory/Debug/my.cnf
--initialize


9.  初次初始化因为我们是选择默认系统初始化 root 用户的密码,所以务必记住日志打印出来的密码,重新启动前去掉 --initialize 参数,使用 root 登陆后会强制让你重设密码。如果这个密码忘了,参见我另外一篇文章《MySQL 8.0 root密码忘了怎么办》

10. 接下来就可以愉快的 debug 了,如果需要 debug 启动初始化过程,可以断点打在 mysqld.cc 文件的 mysqld_main 函数中,如果需要 debug 指令,可以断点打在 sql_parse.cc 文件的 do_command 函数中

你可能感兴趣的:(Mac 下在 xcode 中 debug MySQL 8.0)