失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [工具]Vscode远程开发与远程调试

[工具]Vscode远程开发与远程调试

时间:2023-09-04 01:08:58

相关推荐

[工具]Vscode远程开发与远程调试

使用本地Vscode远程开发代码与远程调试

文章目录

使用本地Vscode远程开发代码与远程调试本地Vsode连接远程服务器Remote - SSH操作步骤Linux上适合Go开发的IDE补充本地Vscode调试远端进程(Go语言)需要条件操作步骤补充应用参考资料

一直使用vscode写代码,也时常觉得vscode的设计挺符合微软的地位。简洁的界面,良好快捷方式,丰富的扩展是我使用vscode的原因。

vscode基于三个产品构建:Chromium 、 Electron 、Monaco-editor。

主要用TypeScript开发。

贴一下项目地址:

/Microsoft/vscode/

另外,也经常有人拿vscode与JetBrains家的IDEA、Gland对比,要证明哪个好用。其实没有什么必要,用的顺手就行了。各有各自的特点,没有必要捧高踩低。

言归正传,最近发现了vscode的两个好用的功能——远程开发代码还有远程调试进程。

本地Vsode连接远程服务器

首先是远程开发代码的。

一般在服务端开发代码都是Linux命令行环境,比较常用的开发工具是Vim。但是,不熟悉Vim的人用起来不方便,比如我习惯了vscode的快捷方式与相应的扩展,转到Vim上就需要转换一下,效率比较低。

有没有一种方式,可以让我在服务端的环境中,也使用vscode开发?

或曰: 你本地开发完再放到服务端不就行了吗 😃

当然不是,这个可以借助一个vscode插件完成——Remote - SSH

插件地址:

/items?itemName=ms-vscode-remote.remote-ssh

Remote - SSH

Remote - SSH可以让我们本地的vscode通过ssh连接远端的服务器,然后,可以在对应文件夹中开发代码(用的是本地的vscode界面)

另外,Remote - SSH还有另外两个兄弟:Remote - WSL以及Remote - Containers。故名思意,通过名字可以知道另外两个是连接什么的。

我们可以看一下怎么使用Remote - SSH。

操作步骤

首先下载Remote - SSH插件下载完成之后,通过插件连接远端(我这里使用虚拟机测试)

输入的是ssh 账户名称@IP,然后就一路回车,中间需要你输入账户的密码。输入密码连接完成,就有下面的提示:

然后就可以通过本地的vscode界面开发,不管是新建文件也好,或者是直接修改代码也可以。但是,注意,有的插件远端是没有的,需要你另外安装——比如Go的插件就需要在远端重新安装。

另外

使用Remote - SSH连接上远端之后,可以运行代码,可以调试。我写了一个http服务测试了一下,在本地确实可以访问。

所以,可以直接在vscode上调试代码。

这样,通过Remote插件,就可以用本地的vscode连接远端服务器开发了。直接保留了开发习惯。

vscode这个功能确实好用,不得不赞叹开源的强大。

Linux上适合Go开发的IDE

如果一定要在Linux上开发Go程序,vscode这样确实挺麻烦的,有的地方并不允许你远程连接。

这里推荐Linux下开发Go好用的IDE:spaceVim

文档:

/cn/documentation/

至于怎么安装,可以看我的另外一篇文章,Centos下直接使用shell脚本安装就可以了。

Centos下开发Go程序的环境安装

补充

上面介绍了Remote-SSH远程连接,在实际应用上面,还可以使用**Vscode+Remote-SSHLinux源代码 ( 不会卡顿的那种 )。

具体应用可以看下面这篇文章:

https://mp./s/pNdiDyAAOvMh7KfvNNj1Mg

但是,

万一,你并没有服务端相应的权限呢。。。

万一,你是开发维护一个守护进程呢。

这样好像就有点棘手了。

本地Vscode调试远端进程(Go语言)

下面就介绍使用本地vscode调试远端程序(或者进程),这个需要借助Go 的调试工具dlv完成。

需要条件

远端进程,知道进程号(或者你运行远端程序,得到进程号)。这里假设进程号为 204031。拥有在远端执行dlv的权限。本地安装有vscode(并没有要求Remote-SSH插件)vscode上,保留有与远端程序版本一致的代码。(代码版本要一致,远端可以没有这个代码——只要有进程)

操作步骤

具体怎么远程调试呢?

这里的原理我先说一下,核心就是利用dlv工具,使用dlv起一个dap server 服务,监听一个端口。而本地的vscode通过配置调试,连接这个端口,使用DAP协议通信和远端通信,进行远程attach调试。

启动程序,得到进程号,假设是204031

开启dlv dap服务,并dlv attach到对应的进程上,随后启动dap server

dlv --headless -l 0.0.0.0:204031 attach 214155--api-version 2#7488为进程号#dlv在哪个目录执行都可以#注意声明 --api-version 2

配置本地的调试文件——launch.json

进入调试窗口,创建launch.json文件,针对Go语言的有package、file、Connect to server三个选项。

选择connect to server之后,将配置信息补充完整:

"configurations": [{"name": "Connect to server","type": "go","request": "attach","mode": "remote",// 注意!!非常关键,这是能否成功设置断点的关键参数。"remotePath": "{编译的项目路径}",// dlv server 启动的端口"port": 2345,// 远程主机的 IP"host": "192.168.xx.xx"}]

例如:

remotePath这个参数非常关键,是你能否远程设置断点成功的关键。它不是进程当前的目录,也不是本地项目的代码目录,而是编译二进制项目的目录。

运行调试

服务端启动,客户端配置好之后。就可以在本地代码上设置断点,然后启动调试,就能够在本地vscode上看到调试信息。这样就可以实现远程调试。

再次赞叹一下vscode的方便以及开源社区的强大,从容器之争的过程就能够看到开源社区强大的力量,所以,我觉得后面vscode会有更多好用的功能。如果还有好用的插件推荐,欢迎在评论区分享 😃 。

补充应用

关于远程调试的应用的,可以通过vscode调试容器里的应用。

构建容器镜像

# 基础镜像FROM golang:latest# 下载dlv工具RUN GOPROXY= go get /go-delve/delve/cmd/dlv# 创建工作目录RUN mkdir -p /go/src/appWORKDIR /go/src/app# 拷贝主机当前文件到工作目录COPY . /go/src/app# RUN go build -gcflags "all=-N -l"# CMD ["dlv", "debug", "--headless", "--listen=:2345", "--log", "--api-version=2" ]# 默认执行命令CMD ["dlv", "debug", "--headless", "--listen=:2345", "--log", "--api-version=2"]

然后docker build -t app .

2. 配置launch.json文件

{"version": "0.2.0","configurations": [{"name": "Launch remote","type": "go", "request": "launch","mode": "remote", // 开启远程模式"remotePath": "/go/src/app", // 远端main文件所在目录,必须是绝对路径"port": 2345, // dlv服务的暴露端口号"host": "192.168.0.250", // dlv服务的ip即docker容器所在主机的ip"program": "${workspaceRoot}",// 本地main文件所在的目录"env": {}}]}

启动容器

docker run --rm --name webapp --security-opt="seccomp=unconfined" -cap-add=SYS_PTRACE -p 2345:2345 app

然后就可以打断点调试了

总结一下,今天介绍了使用本地vscode远程开发还有远程调试的方法。

远程开发可以通过Remote-SSH插件连接远端,完成开发与调试。远程调试只是针对Go程序,借助dlv,远程启动dap服务,然后本地vscode调试环境连接这个服务,就可以在本地代码打断点调试了。需要注意,代码版本要一致。并且,远端可以只是进程没有代码,本地一定要有代码。好用的东西就是要分享 😃

参考资料

go调试【翻译】 /post/6844904087763304462

用vscode调试 /post/7080135520902184997

调试docker里的go /post/684490416551731

程序是调出来的 https://www.modb.pro/db/377704

dlv介绍 /show-133461.html

dlv使用 /p/4f3c2e913915

如果觉得《[工具]Vscode远程开发与远程调试》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。