windows系统vscode远程调试mysql

准备工作

本文目标是可以从 Windows  VSCode 环境远程访问 Linux 的 MySQL源码, 以及执行 GDB 远程调试

创新互联公司成立10年来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供做网站、网站建设、网站策划、网页设计、域名申请、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,创新互联公司通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。

首先准备以下软件

在本地机器上:

  • 安装  VS Code 目前最新版本支持 Remote - Development 插件
  • 安装 VSCode 扩展 “Remote - Development”, 方法是左下角  管理(⚙) ->  扩展, 直接搜索商店
  • 安装兼容 OpenSSH 的 SSH 客户端, 我安装的  Git for Windows 

在远程机器上:

  • 编译安装mysql(注意编译时需开启 -DWITH_DEBUG=1),并且启动mysql实例,这里我是在centos(CentOS Linux release 7.7.1908)上面编译安装的mysql8.0.18(为方便没有 mysql编译安装经验的读者回头另写一篇 mysql8.0.18编译安装)

  • 安装 gdb,   yum install gdb

  • 安装 gdbserver,  yum install gdb-gdbserver
  • 启动 ssh 服务端, 通常默认已经启动

使用 VSCode 远程访问代码

VSCode主界面 查看  ->  扩展 搜索 “Remote - Development” 并安装,安装成功后左边会有个电脑图标

windows系统vscode远程调试mysql

首先改设置, 左下角 管理(⚙) ->  设置, 搜 “remote.SSH”, 勾选  remote.SSH.showLoginTerminal 

完后就可以连接到远程机器了, 为避免频繁输入密码建议使用免密ssh登录

首先生成密钥:

# 生成一对密钥, 文件名写vscode_rsa
ssh-keygen -t rsa
# 公钥需要放到 Linux 执行环境里
# 公钥为 "vscode_rsa.pub"
cat /root/.ssh/vscode_rsa.pub >> /root/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys
# 私钥放在 VSCode 一端 Windows 机器里
# 我的路径是 "D:/dba/vscode_rsa"

然后在 VSCode 主界面  ctrl+shift+p 选  Remote.SSH: Open Configuration File, 输入以下内容:

Host vm-mysql               <- 连接标识, 随便写
    HostName 192.168.126.128           <- 远程机器 IP(我写的装载centos的虚机ip)
    User root
    IdentityFile D:/dba/vscode_rsa  <- 私钥的本地完整路径

在 VSCode 主界面  ctrl+shift+p 选  Remote.SSH: Connect to host, 输入  root@, 成功后界面左下角会有  SSH:  的已连接状态, 同时这个 VSCode 也变成了该远程连接的专属实例, windows系统vscode远程调试mysql

图示通过 SSH 连接远程linux机器成功后

然后就可以从侧边栏打开项目路径了, 点击左边的资源管理器,点击打开文件夹,在下图蓝框处输入mysql源码路径(注意不是编译后的运行程序路径是源码解压路径,我的环境源码路径为/home/mysql/rpmbuild/SOURCES/mysql-8.0.18,这里我还向下选择sql目录,因为mysql的大多数核心代码在该目录下,如main函数)

windows系统vscode远程调试mysql

安装一些需要的扩展, 如:

  • C/C++ IntelliSense, debugging, and code browsing

有些扩展是要安装在 SSH 的目标机器上, 安装时会提示你  install on SSH: xxxx, 而主题类扩展和一部分功能类扩展是安装在本地机器上

使用 VSCode 和 gdbserver 远程调试 mysql 代码

在远程 Linux 机器上运行如下代码:

gdbserver localhost:2333 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql

(注意这个代码我执行成功了,后面的mysql参数是我根据参考文章猜测写的,这里是指定了mysql配置文件以及启动用户和mysql实例启动时的一致,没有仔细查阅gdbserver命令行用法,欢迎指正。顺便贴下我mysql的启动命令方便读者佐证, /usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql )

我vm虚机远程 Linux 机器 IP 是  192.168.126.128, gdbserver 的端口设为  2333, 在 VSCode 机器上, 进入菜单  调试 ->  添加配置, 会生成一个配置文件  SSH之后的项目根目录/.vscode/launch.json, 将其修改如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gdb Remote Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/usr/local/mysql/bin/mysqld",
            "stopAtEntry": true,
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb",
            "miDebuggerArgs": "gdb",
            "linux": {
                "MIMode": "gdb",
                "miDebuggerPath": "/usr/bin/gdb",
                "miDebuggerServerAddress": "192.168.126.128:2333",
            },
            "logging": {
                "moduleLoad": false,
                "engineLogging": false,
                "trace": false
            },
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "cwd": "${workspaceFolder}",
        }
    ]
}

几个注意的地方:

  • 应该是  "request": "launch", 不是 “attach”, 此后也并不需要记录进程ID
  • 需要填对  "miDebuggerServerAddress": "192.168.126.128:2333", 有这个设置才会开启 gdb 远程调试
  • "engineLogging": true 可以看到 gdb 自身的详细消息
  • 必须是  "externalConsole": false 否则报错
  • /usr/local/mysql/bin/mysqld 在 gdbserver 和 launch.json 里都要填一次,即mysql编译后的启动程序

之后就可以使用调试功能了, 添加断点, 监视等等, 如图:

windows系统vscode远程调试mysql

图示远程 gdb 调试

在 VSCode 的调试控制台输入变量名, 就可以直接打印出来, 想使用默认的调试器命令要在前面加  -exec, 如  -exec p/x args

附 gdbserver usage

gdbserver  --help
Usage:    gdbserver [OPTIONS] COMM PROG [ARGS ...]
    gdbserver [OPTIONS] --attach COMM PID
    gdbserver [OPTIONS] --multi COMM
COMM may either be a tty device (for serial debugging), or
HOST:PORT to listen for a TCP connection.
Options:
  --debug               Enable general debugging output.
  --remote-debug        Enable remote protocol debugging output.
  --version             Display version information and exit.
  --wrapper WRAPPER --  Run WRAPPER to start new programs.
  --once                Exit after the first connection has closed.
Report bugs to "".

参考:

使用 VSCode 远程访问代码以及远程 GDB 调试

线程简介和MySQL调试环境搭建(这篇是八怪在知数堂发布的 深入理解mysql主从原理的29讲 一个收费课程,30多块很划算想深入学习这块的可以买下)


本文标题:windows系统vscode远程调试mysql
URL标题:http://azwzsj.com/article/ijdesi.html