vscode 搭建mysql源码调试环境(转)
转载:
https://www.modb.pro/db/111795
操作系统:MAC OS 11.5.2
MySQL源码版本:8.0.26
VSCode版本: 1.60.0
1、编译安装MySQL
1、MySQL源码下载,建议下载自带boost的版本
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.26.tar.gz
2、安装cmak,建议用brew安装
brew install cmake
brew install gcc
3、编译安装MySQL
cd
cmake . -DCMAKE_INSTALL_PREFIX=/Users/yangminghan/Documents/mysql -DMYSQL_DATADIR=/Users/yangminghan/Documents/mysql/data -DWITH_DEBUG=1 -DSYSCONFDIR=/usr/local/ -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/Users/yangminghan/Documents/mysql-8.0.26/boost -DFORCE_INSOURCE_BUILD=1
make && make install
export PATH=$PATH:/Users/yangminghan/Documents/mysql/bin
#将之前安装的mysql删除
brew list
brew uninstall mysql
#编辑配置文件
/Users/yangminghan/Documents/mysql/my.cnf
#初始化
mysqld --defaults-file=/Users/yangminghan/Documents/mysql/my.cnf --user=yangminghan --initialize
#启动服务
mysqld_safe --defaults-file=/Users/yangminghan/Documents/mysql/my.cnf &
#创建用户修改密码
alter user 'root'@'localhost' identified by 'Tcdn@2007';
create user 'root'@'%' identified by 'Tcdn@2007';
grant all privileges on *.* to 'root'@'%' with grant option;
2、安装配置VSCode
1、官网下载mac版本 https://code.visualstudio.com/Download
1.png
2、安装插件
CodeLLDB,C/C++,C/C++ Clang Command Adapter,Code Runner
2.png
3、在vscode中打开MySQL源码
3.png
4.png
3、启动调试
进入运行与调试功能
5.png
编辑launch.json,其中type填写lldb,program填写编译好的可执行文件,args填写启动参数
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "launch",
"type": "lldb",
"request": "launch",
"program": "/Users/yangminghan/Documents/mysql/bin/mysqld",
"args": ["--defaults-file=/Users/yangminghan/Documents/mysql/my.cnf","--user=yangminghan"],
}
]
}
F5或点击运行按钮,启动调试
6.png
从控制台输出可以看到MySQL进程已启动,在终端上可以正常登陆
7.png
8.png
打断点调试
在 sql/sql_parse.cc do_command上打一个断点
9.png
执行一个简单的insert操作,可以看到在事务提交时binlog.cc中会根据事件的 binlog_format 返回有关缓存内容的信息。当may_have_sbr_stmts为false时代表事务是rbr_only的,这时将在binlog中打印语句将事务隔离级别更改为 READ COMMITTED,已加快备库应用binlog的速度
10.png
11.png
12.png
源码调试可以加深对MySQL架构、细节的理解,但需要花费较多时间逐渐积累。
以上只是一个搭建环境的简单记录,有兴趣的同学可以自己尝试。