vscode远程Mysql数据库_windows系统vscode远程调试mysql

准备工作

本文目标是可以从 Windows

VSCode 环境远程访问 Linux 的 mysql源码, 以及执行 GDB 远程调试

首先准备以下软件

在本地机器上:

安装

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” 并安装,安装成功后左边会有个电脑图标

3913831d587ae09ad2a93358056fddf7.png

首先改设置, 左下角

管理(⚙) ->

设置, 搜 “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           

User root

IdentityFile D:/dba/vscode_rsa  

在 VSCode 主界面

ctrl+shift+p 选

Remote.SSH: Connect to host, 输入

root@, 成功后界面左下角会有

SSH:  的已连接状态, 同时这个 VSCode 也变成了该远程连接的专属实例,

1b717725018138769cb2e62a634860db.png

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

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

303936bde384f258886309b1ff1641b5.png

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

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编译后的启动程序

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

0f40fded8846d37fac3360ae58cb8405.png

图示远程 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调试环境搭建(这篇是八怪在知数堂发布的 深入理解mysql主从原理的29讲 一个收费课程,30多块很划算想深入学习这块的可以买下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java io 文件路径_【IO流】java中文件路径(相对路径、绝对路径)相关类及方法...

1. URL菜鸟教程:Java URL处理 通常推荐对http等协议进行使用,若操作(file:)部分属性将无意义,建议getFile()。相关:URLConnections 类 可以打开连接进行IO 通过getResource方法可以获得相对于classPath的文件的URL2. FileTestvoid…

java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式)

XSS攻击是什么XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中…

java高级教程_Java高级教程02

1.Java线程1.1. 多线程和多进程多进程:操作系统能够同时进行多个任务: 每个app(word,播放器,浏览器)可以同时运行多线程:同一应用程序中哟多个顺序流同时执行线程是进程中的一部分1.2. 线程的执行过程:主要过程:多线程…

【LeetCode刷题笔记】动态规划(二)

647. 回文子串 解题思路: 1. 暴力穷举 , i 遍历 [0, N) , j 遍历 [i+1, N] ,判断每一个子串 s[i, j) 是否是回文串,判断是否是回文串可以采用 对撞指针 的方法。如果是回文串就计数 +1

数据结构 排序 java_Java数据结构之排序---选择排序

简单选择排序的介绍:从给定的序列中,按照指定的规则选出某一个元素,再根据规定交换位置后达到有序的目的。简单选择排序的基本思想:假定我们的数组为int [] arr new int[n],第一次我们从arr[0]~arr[n-1]中选择出最小的…

python百度aip移动目标监控系统_python利用百度云接口实现车牌识别

一个小需求---实现车牌识别。目前有两个想法调云在线的接口或者使用SDK做开发(配置环境和编译第三方库很麻烦,当然使用python可以避免这些问题)自己实现车牌识别算法(复杂)!一开始准备使用百度云文字识别C SDK来做,发现需要准备curl、jsoncpp…

centos tar安装mysql_centos系统通过tar.gz包安装mysql5.7.19

系统:centos6.5 64位系统1、下载mysql本人选的linux generic 通用版 64位2、把mysql传到服务器并解压到/usr/localtar -xzvf mysql-5.7.19-linux-glibc2.12-x86_64.tar -C /usr/local3、进入/usr/local目录:cd /usr/local4、为mysql安装目录创建软链接ln -s mysq…

aqs clh java_【Java并发编程实战】----- AQS(一):简介

在前面博客中,LZ讲到了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch,他们都有各自获取锁的方法,同时相对于Java的内置锁,他们具有明显的优势:花最小的空间开销创建锁、最少的时间开销获得锁、使…

gitlab ci 配置 java_GitLab CI/CD 配置

GitLab CI/CD 配置概念操作示例创建测试项目 sample-web,然后打开项目的 Runners 配置找到这个地方,后边要用然后搭建 gitlab-runner,CI/CD 需要通过它实现# 创建 gitlab-runner 目录mkdir -p /usr/local/gitlab-runner && cd /usr/l…

java失败javac成功_JAVA SE JDK-10安装、配置(解决java成功,javac失败问题)

本文是在win10环境下安装JDK-10在linux环境下安装JDK-10请点击:CentOS 7 安装、配置JDK-101、下载JDK包点击打开下载网站点击图中的Accept License Agreement,再选择Win版本进行下载2、安装JDK包下载完毕,运行安装程序修改安装路径(这里选择的…

java搭建聊天服务器_使用 ServerSocket 建立聊天服务器-2

1.从serverListener中可以看出,每一个客户端创建新的请求之后,都会把它分配给一个独立的chatsocket ,但是每一个ChatSocket都是相互独立的,他们之间并不能沟通,所以要新建一个类,将这些新建的线程管理起来,然后实现他们之间的相互通信.(类似于微信加群聊天的功能)由于一个聊天服…

lavarel php区别,laravel中{{}}和{!! !!}的区别详解

本篇文章介绍了laravel中{{}}和{!! !!}的区别,感兴趣的朋友可以参考下。laravel中{{}}和{!! !!}的区别详解1.{{}}和{!! !!} 中{{}}支持转义 一段html代码只是被当成普通的字符串输出 ,{!! !!} 不支持转义 一段html代码可以被正常的解析1.2具体什么意思呢…

php获取ios,IOS 通过描述获取UDID PHP代码版

难点在于PHP对XML的解析文件结构:第一步:新建HTML文件 用于跳转安装描述文件 必须在safari里面打开地址第二步:新建udid.mobileconfig文件PayloadContentURLhttps://www.xxx.com/pay_super/receive.phpDeviceAttributesUDIDIMEIICCIDVERSIONP…

matlab如何读取csv,Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件 | 学步园...

CSV,逗号分开的文件,如果能快速的读取这些文件中的数据,无疑会帮助我们解决很多问题。1、 只有数据的CSV文件,CSV file that includes only numbers.As an example, create a text file, named as data.csv if you prefer, which …

url中隐藏php后缀,url中如何隐藏.php

url中隐藏“.php”的方法:首先找到并打开“nginx.conf”配置文件;然后添加内容“location / {ttry_files $uri $uri/ $uri.php$is_args$args;}”;最后保存修改即可。推荐:《PHP视频教程》现在很多人都喜欢用nginx作为Web服务器部署…

discuz手机客户端java,Discuz!7.2让高级搜索更全面

Discuz! 7.2 调整了对帖子的高级搜索,使高级搜索的搜索选项更细化,覆盖面更广。一、高级搜索功能介绍高级搜索界面如下图所示:1、按作者:此处可以填写发帖作者全名,也可以使用通配符"*",如填写&q…

php面向对象异常处理,PHP 错误和异常处理(下)

PHP 错误和异常处理(下)由 学院君 创建于9个月前, 最后更新于 7个月前版本号 #11723 views2 likes0 collects上篇我们讲了 PHP 中的错误报告和捕获,今天,我们来看看 PHP 程序中的异常处理。错误 vs. 异常错误与异常可以看作一对孪生兄弟,从严…

电脑运行java游戏,电脑运行软件卡顿?这几招游戏或是办公,让你速度飞起!...

许多朋友想知道他们已经购买了高端计算机,但是无论玩游戏还是运行软件,他们仍然陷于困境。今天,让我们教大家一个简单的方法来提高计算机性能。焦点:此方法大大提高了用户对高度配置的计算机的影响。如果计算机的设置不太高&#…

c matlab 数据类型,matlab中数据类型与c语言数据类型的区别?

matlab中数据类型与c语言数据类型的区别?mip版 关注:233 答案:3 悬赏:0解决时间 2021-02-23 08:46已解决2021-02-22 22:32matlab中数据类型与c语言数据类型的区别?最佳答案2021-02-22 22:42简单谈一下。1.好多类型是对应的。输入一个数,ma…

oracle数据库安装提示M,Python第13课:oracle数据库的安装

Python第13课:oracle数据库的安装时间 2019-01-22下午4:30主讲 罗恒丰地点 四楼电教室版本:11.2大小:2.06G安装文件在专班ftp里python安装文件的文件夹。一.找到 stage/cvu/cvu_prereq.xml ,编辑系统名,以适…