环境准备
- mac os
- Clion (一款C++IDE开发工具)
- Mysql 8.0 源码 (下载地址:https://github.com/mysql/mysql-server)
编译MySQL服务端
导入源码到Clion
- 通过"New Cmake Project from Sources"打开mysql源码
- 选择"Open Existing Project"
配置cmake
打开cmake配置页面: clion -> Preferences -> Build,Execution,Deployment -> CMake
CMake options配置如下:
-DWITH_DEBUG=1
-DDOWNLOAD_BOOST=1
-DDOWNLOAD_BOOST_TIMEOUT=60000
-DWITH_BOOST=/usr/local/Cellar/boost
Generation path : 编译时生成的文件,存放此路径下
因此编译生成的mysqld文件,存放在cmake-build-debug/bin路径下
运行cmake
点击 File -> Reload CMake Project
编译 and 初始化mysql
点击右上角的 Edit Configurations...
找到mysqld,并配置Program arguments
--basedir=/Users/haolong/Desktop/test/mysql
--datadir=/Users/haolong/Desktop/test/mysql/data
--initialize-insecure
保存配置后,点击debug按钮(下图箭头所指),进行编译和初始化mysql数据目录
首次编译,比较慢,耐心等待即可。编译成功后,控制点会输出如下内容
运行mysqld
-
修改mysqld的Program arguments配置
删除最后一行,保留之前的配置即可,如下图所示
- 点击debug按钮,控制台输出如下,表示mysql服务端启动成功
连接MySQL服务端
编译mysql命令
点击"Edit Configurations..."
找到"mysql"(注意不是mysqld),点击ok按钮
点击debug按钮,编译mysql
编译后,控制台可能有如下ERROR日志,不用理会,我们的目的是生成mysql文件
设置断点
在clion中,对row0mysql.cc类的row_insert_for_mysql_using_ins_graph方法设置断点
当执行insert语句时,就会进入此断点
连接服务端
还记得去哪里找编译生成的mysql文件吧?
当然是配置cmake时,指定的Generation path目录
然后进入此目录,登录mysql命令行
cd /Users/haolong/Desktop/test/mysql-server-8.0/cmake-build-debug
bin/mysql -u root
然后:执行插入语句,即可跳入断点