准备工作
本文目标是可以从 Windows VSCode 环境远程访问 Linux 的 mysql源码, 以及执行 GDB 远程调试
首先准备以下软件
在本地机器上:
管理(⚙) ->
扩展, 直接搜索商店
安装兼容 OpenSSH 的 SSH 客户端, 我安装的
在远程机器上:
编译安装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” 并安装,安装成功后左边会有个电脑图标

首先改设置, 左下角
管理(⚙) ->
设置, 搜 “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@<ip>, 成功后界面左下角会有
SSH: <ip> 的已连接状态, 同时这个 VSCode 也变成了该远程连接的专属实例,
图示通过 SSH 连接远程linux机器成功后
然后就可以从侧边栏打开项目路径了, 点击左边的资源管理器,点击打开文件夹,在下图蓝框处输入mysql源码路径(注意不是编译后的运行程序路径是源码解压路径,我的环境源码路径为/home/mysql/rpmbuild/SOURCES/mysql-8.0.18,这里我还向下选择sql目录,因为mysql的大多数核心代码在该目录下,如main函数)

安装一些需要的扩展, 如:
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编译后的启动程序
之后就可以使用调试功能了, 添加断点, 监视等等, 如图:

图示远程 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 "<
参考:
(这篇是八怪在知数堂发布的 深入理解mysql主从原理的29讲 一个收费课程,30多块很划算想深入学习这块的可以买下)
编辑推荐:
- windows系统vscode远程调试mysql03-01
- MySQL:count(*) count(字段) 实现上区别03-01
- gh-ost的学习03-01
- mysql如何允许远程访问03-01
- MySQL 错误代码03-01
- 【沃趣科技】再述mysqldump时域问题03-01
- 【沃趣科技】MySQL高可用工具Orchestrator系列五:raft多节点模式安装03-01
- 常用的 19 条 MySQL 优化03-01
下一篇:
相关推荐
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- windows系统vscode远程调试mysql
windows系统vscode远程调试mysql
26-03-01
- MySQL:count(*) count(字段) 实现上区别
MySQL:count(*) count(字段) 实现上区别
26-03-01
- gh-ost的学习
gh-ost的学习
26-03-01
- mysql如何允许远程访问
mysql如何允许远程访问
26-03-01
- 【沃趣科技】再述mysqldump时域问题
【沃趣科技】再述mysqldump时域问题
26-03-01
- 【沃趣科技】MySQL高可用工具Orchestrator系列五:raft多节点模式安装
- 求索作文网采用ZBLOG-PHP程序能够承受百万级的数据压力吗?
求索作文网采用ZBLOG-PHP程序能够承受百万级的数据压力吗?
26-03-01
- MySQL:查询字段数量多少对查询效率的影响
MySQL:查询字段数量多少对查询效率的影响
26-03-01
- 上海苏州APP软件开发外包公司排名哪家好 好快科技
上海苏州APP软件开发外包公司排名哪家好 好快科技
26-03-01
- MySQL数据和Redis缓存一致性方案详解
MySQL数据和Redis缓存一致性方案详解
26-03-01
