mysql-mysql源码本地调试

前言

先进行mysql源码本地编译:mysql源码本地编译

1.本地调试

这里以macbook为例

1.使用vscode打开mysql源码

2.创建basedir目录、数据目录、配置文件目录、配置文件

复制代码
cd /Users/test/
mkdir  mysqldir
//创建数据目录和配置目录
cd mysqldir
mkdir conf data
cd conf
touch my.cnf

目录结构如图:

3.编辑my.cnf配置文件

复制代码
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/Users/test/mysqldir
datadir=/Users/test/mysqldir/data
socket=/Users/test/mysqldir/mysql.sock
log-error=/Users/test/mysqldir/mysql.err
pid-file=/Users/test/mysqldir/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

[client]
port=3306
socket=/Users/test/mysqldir/mysql.sock

4.初始化mysql

mysql源码编译成功后可执行文件mysqld、mysql会出现在工程的build/bin下

4.1配置mysql数据库debug配置

在工程目录下创建.vscode目录并在该目录下创建launch.json文件

4.2编辑launcun.json文件

复制代码
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "C++ Debug",
        "type": "lldb",//windows系统是cppgdb,macbook系统是lldb
        "request": "launch",
        "program": "${workspaceFolder}/build/bin/mysqld", // 替换为你的可执行文件路径
        "args": [
            "--defaults-file=/Users/test/mysqldir/conf/my.cnf"
          ///"${workspaceFolder}/data.xodr"
        ],
     //    "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
     //   "environment": [],
      //  "externalConsole": false,
     //   "MIMode": "lldb",
        // "setupCommands": [
        //   {
        //     "description": "Disable pretty printing",
        //     "text": "-enable-pretty-printing",
        //     "args": [],
        //     "ignoreFailures": true
        //   }
        // ],
        // "miDebuggerPath": "/opt/homebrew/bin/gdb"  // 根据系统修改路径,如 macOS 上可能是 `/opt/homebrew/bin/gdb`
      }
    ]
  }

4.3安装codelldb插件

安装过程中有可能会让你去github下载codelldb-darwin-x64.vsix会很慢,不过放心我已经帮你下载好了

链接: https://pan.baidu.com/s/1FSMyzNfLu9fTaMR1-X2Mzg?pwd=cyv2 提取码: cyv2

下载后之后选择插件下载界面,将该文件拖拽到vscode插件列表区域会自动安装,等待安装成功即可。

4.4开始mysqld启动调试

ctrl+p搜索 sql_parse.cc文件

开启调试

进入调试状态

设置断点

为什么先开启调试再设置断点,因为数据库服务端启动的时候也会执行这个方法,为了影响mysqld的正常启动,等到调试启动后再打断点。

4.5 启动mysql客户端

进入build/bin启动mysql客户端

复制代码
./mysql -uroot -p -S /Users/test/mysqldir/mysql.sock

回车进入数据库客户端

创建数据库

复制代码
create database test;

使用数据库

复制代码
use test

创建数据库

复制代码
create table test(
  age int,
  name varchar(15)
) engine=innodb character set utf8mb4;

4.6执行sql进行

客户端执行

复制代码
select * from test;

此时回到调试界面会看到断点处已经暂停

到这里关注

复制代码
int mysql_execute_command(THD *thd, bool first_level) 
中的thd变量,找到m_query_string属性

好的,结束

相关推荐
robin591120 小时前
Linux-通过端口转发访问数据库
linux·数据库·adb
懒羊羊不懒@20 小时前
【数据库 | 基础】DDL语句以及数据类型
数据库
泷羽Sec-静安20 小时前
Less-9 GET-Blind-Time based-Single Quotes
服务器·前端·数据库·sql·web安全·less
李宥小哥21 小时前
结构型设计模式2
网络·数据库·设计模式
猫头虎21 小时前
永久免费白嫖多个域名,一键托管Cloudflare,免费申请SSL加密证书,轻松建站、搭建线路伪装
服务器·开发语言·网络·数据库·python·网络协议·ssl
真正的醒悟1 天前
什么是安全设备组网
服务器·数据库·php
小哈里1 天前
【软考架构】2025H2系统架构设计师考试复习.jpg(软件架构、软件工程、数据库、Web开发、高项)
数据库·架构·系统架构·软件工程·后端开发
B站_计算机毕业设计之家1 天前
深度学习:Yolo水果检测识别系统 深度学习算法 pyqt界面 训练集测试集 深度学习 数据库 大数据 (建议收藏)✅
数据库·人工智能·python·深度学习·算法·yolo·pyqt
赵文宇1 天前
站在MySQL肩膀上快速入门PostgreSQL,开源社区最喜爱的关系数据库
mysql·postgresql
wei_shuo1 天前
全场景自动化 Replay 技术:金仓 KReplay 如何攻克数据库迁移 “难验证“ 难题
数据库·自动化·king base