博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

Vscode 远程连接 Linux 服务器编译调试MySQL

Posted on 2022-04-29 11:45  面具下的戏命师  阅读(1520)  评论(0编辑  收藏  举报

Vscode 远程 连接 Linux 服务器编译调试MySQL

在当今这个时代,提到 DBA,已经不是会一个 oracle 就可以吃遍天下了。 如下开源横行,一个优秀的DBA要能进行一般内核问题的故障诊断与分析。在两年前笔者写了一篇windows下使用visual studio编译调试MySQL。出于visual studio局限于 windows 平台,而在生产环境基本 MySQL 都部署在 Linux 平台上。当然也出于笔者现在用的是 mac 笔记本,还是恶心人的m1芯片,不支持安装虚拟机。因此只能使用 vscode 这个跨平台的 IDE。但是在 mac 上直接编译 MySQL 又出现各种各样的依赖,好在 vscode 提供了 Remote SSH 插件,可以远程到 Linux 服务器远程编写调试 MySQL。本文因 m1 芯片不支持虚拟机,因此采用 docker 安装 linux。正文开始:

环境准备:

mac windows linux 均可

vscode

docker vmware 云主机或其他任意 linux 服务器均可

mysql-boost-8.0.28.tar.gz   自行到官网下载

本文采用的环境为: mac m1  、 docker centos8

环境搭建:

vscode 和 docker的安装本文就不再赘述了,网上有大量的安装教程

1、docker 创建

// 拉取镜像
docker pull centos
// 创建容器
docker run --privileged=true -tid  -e "container=docker"  -p 5001:22 -p 3006:3006 --name centos centos /usr/sbin/init
// 登录容器
docker exec -it centos /bin/bash

现在 centos 最新版容器已经创建好了,接下来需要做一些对容器做一些初始化操作:

  1.1、安装 ssh 服务和基础依赖组件

yum -y install wget tar make  cmake gcc gcc-c++ ncurses  ncurses-devel  libaio-devel  openssl openssl-devel  libtirpc-devel  bison openssh-cliens openssh-server vim passwd gdb

yum install gcc-toolset-10-gcc gcc-toolset-10-gcc-c++ gcc-toolset-10-binutils

systemctl start sshd

  1.2、用户创建,源码上传

groupadd mysql
useradd mysql -g mysql
passwd mysql
// 源码上传
docker cp mysql-boost-8.0.28.tar.gz centos:/home/mysql
// 解压
tar -zxvf mysql-boost-8.0.28.tar.gz

2、vscode 配置

到这里已经默认 vscode 已经安装好了,我们需要在本地安装 Remote-SSH 插件:

接着,按 shift + command + p  (win 平台按Ctrl + Shift + p)通过 Remote 插件连接到远程的 Linux 服务器或本地 WSL,并打开远程服务器。

点击上图的第一个就可以通过 ssh 客户端远程连接上 linux 服务器了。点击左侧打开文件夹,选择解压好的 mysql 路径,这样就可以打开源码文件夹了。打开后的效果如图所示:

接下来需要在远程服务器上安装 C/C++、CMake、CMake Tools插件:

在安装完 CMake Tools 插件后,在 VSCode 的底部,可以看到 CMake 的配置选项:

如图所示:笔者的环境已经选择了 GCC10.3.1。 笔者曾经遇到这样一个情况,默认搜索不到 GCC10.3.1,只找到了 linux 系统默认安装的 GCC8.5。笔者属于手动添加配置文件,将 GCC10.3.1给加了进去,步骤如下:选择插件 Cmake tools  扩展设置 工作区 Cmake: Additional Kits。添加配置项,填入一个 json 串的路径,如图所示:

json 文件放置到 linux 服务器上对应的路径下,文件内容如下:

[
  {
    "name": "GCC 10.3.1 gcc-toolset-10",
    "compilers": {
      "C": "/opt/rh/gcc-toolset-10/root/bin/aarch64-redhat-linux-gcc",
      "CXX": "/opt/rh/gcc-toolset-10/root/bin/aarch64-redhat-linux-g++"
    }
  }
]

接下来,就可以选择GCC10.3.1来编译了

vscode 底部最左侧选择编译的版本,按下CMake会出现Debug、Release、MinSizeRel、RelWithDebInfo 的编译版本选择,我们此处选择 Debug

之后的齿轮图片⚙表示进行BUILD编译;蜘蛛🕷图片表示调试按钮;最后的箭头表示表示启动程序。

在编译前,还需要对 CMake 做一些配置,因为 MySQL 源码依赖 boost 库,我们下载的版本已经自带了 boost 库,但是 MySQL 编译过程中并不会自己找到,因此我们需要配置下 boost 库的路径。选择 cmake tools组件 扩展设置,Cmake: Configure Args。 添加如下配置:

接下来就可以编译了,点击底部的 BUILD 按钮,就可以顺利的完成编译工作了。 

至此已经顺利编译完成了,编译的速度取决于服务器的配置,我这使用的本机上的 docker 容器,因此效率比较低,大约1个多小时。

现在就可以选择启动的目标,这里我们选择启动 mysqld

在启动前,还需要做两项配置,第一个登录到 linux 服务器,手动初始化一个 MySQL 实例,此处不再给出具体的初始化步骤,网上也有大量的教程。

第二个配置launch.json 用于调试 MySQL。 在项目下的 .vscode 下创建 launch.json 内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdb Remote Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/mysql/mysql-server/build/runtime_output_directory/mysqld",
            "args": ["--user=mysql", "--datadir=/home/mysql/mysql-server/build/data"],
            "stopAtEntry": true,
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb",
            "miDebuggerArgs": "gdb",
            "linux": {
                "MIMode": "gdb",
                "miDebuggerPath": "/usr/bin/gdb"
                //"miDebuggerServerAddress": "10.10.1.1:2000",
            },
            "logging": {
                "moduleLoad": false,
                "engineLogging": false,
                "trace": false
            },
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "cwd": "${workspaceFolder}",
        }
    ]
}

好了,现在一切准备就绪:

调试 MySQL

现在可以在 main.cc 主函数上打断点,按 f5 启动调试。如图所示,断点已被成功命中

现在修改 MySQL 源码,自定义 MySQL 的版本了,如:

 

参考博客:https://www.modb.pro/db/112992