mysql source code - yaokun123/php-wiki GitHub Wiki
一、如何使用clion 调试 mysql5.7源码
https://www.jianshu.com/p/fd9beb91ad66
clion -> Preferences -> Build,Execution,Deployment -> CMake options配置如下:
-DWITH_DEBUG=1
-DDOWNLOAD_BOOST=1
-DDOWNLOAD_BOOST_TIMEOUT=60000
-DWITH_BOOST=/usr/local/Cellar/boost
-DWITH_SSL=/usr/local/opt/[email protected] # openssl路径一定要设置正确,要求openssl版本大于1.1.1
二、找到mysqld,并配置Program arguments
--basedir=/Users/yaokun/mysql-private/mysql_output/mysql5.7/mysql
--datadir=/Users/yaokun/mysql-private/mysql_output/mysql5.7/data
--initialize-insecure # 5.6版本不支持这个参数,先去掉
三、运行mysqld
修改mysqld的Program arguments配置
删除最后一行,保留之前的配置即可
--basedir=/Users/yaokun/mysql-private/mysql_output/mysql5.7/mysql
--datadir=/Users/yaokun/mysql-private/mysql_output/mysql5.7/data
连接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
然后:执行插入语句,即可跳入断点
version问题解决
在执行 cmake 前,先批改个地方
-
1、文件 VERSION 重命名为 MYSQL_VERSION
-
2、文件 cmake/mysql_version.cmake 中 2 处代码,VERSION 替换为 MYSQL_VERSION
CONFIGURE_FILE(
- ${CMAKE_SOURCE_DIR}/VERSION
+ ${CMAKE_SOURCE_DIR}/MYSQL_VERSION
${CMAKE_BINARY_DIR}/VERSION.dep
)
IF(NOT ${var})
- FILE (STRINGS ${CMAKE_SOURCE_DIR}/VERSION str REGEX "^[ ]*${keyword}=")
+ FILE (STRINGS ${CMAKE_SOURCE_DIR}/MYSQL_VERSION str REGEX "^[ ]*${keyword}=")
IF(str)
STRING(REPLACE "${keyword}=" "" str ${str})
STRING(REGEX REPLACE "[ ].*" "" str "${str}")
参考:
cmake -DCMAKE_INSTALL_PREFIX=/Users/yaokun/mysql-private/mysql_output/mysql5.6/mysql\
-DMYSQL_DATADIR=/Users/yaokun/mysql-private/mysql_output/mysql5.6/data\
-DSYSCONFDIR=/Users/yaokun/mysql-private/mysql_output/mysql5.6/mysql\
-DMYSQL_UNIX_ADDR=/Users/yaokun/mysql-private/mysql_output/mysql5.6/mysql/mysql.sock\
-DWITH_SSL=/usr/local/opt/[email protected]\
-DWITH_DEBUG=1\
-DDOWNLOAD_BOOST=1\
-DWITH_BOOST=/Users/yaokun/mysql-private/mysql_output/mysql5.6/mysql-server\
-DDOWNLOAD_BOOST_TIMEOUT=60000