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}")

参考:

https://lequ7.com/guan-yu-shu-ju-ku-mysql-yuan-ma-yue-du-wen-ti-expandedfrommacromysqlversionmajor.html

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