vscode c语言 调试的时候怎么输入_优雅地使用VS code ( 远程Remote篇 )

3afd60b64b3336fe8318b94229e73f93.png

一、目的

本文的主要解决的问题:手上有性能较差的轻便办公本和云服务器。怎么用VS Code 让两者产生关系,并经过一系列的操作使得我们能够在轻便地用办公本(such as MBP)调用服务器强劲的计算性能。

除了C++,其他东西我现在全用vscode来写了,爽的一笔,毫无竞争对手。——某知友
VS Code 自出生以来就能看出其强大,同宇宙第一大IDE( Visual Studio ) 一以贯之的的设计风格,但又和VS 存在本质的区别——轻便的编辑器和无限可能的后端。
VS Code是一个平台,提供了Debug API,Source Control API,Language Extension,允许整个生态基于这些 API开发Extension。

二、方法

VS Code 涵盖各种插件,本文通过各种插件实现用服务器运行本地代码、同步本地和服务器代码、本地调试服务器代码。

2.1 jupyter 大法好

jupyter 提供了一套完整了remote 的服务器方案。jupyter 有千千万万的优点,但是就不是IDE,为什么不把 Jupyter 的remote 解决方案移植到VS Code 中来,既有了jupyter 各种花里胡哨的表现能力又有了了IDE该有的代码编辑能力,顺带还通过Jupyter完成了本地代码编写+远程服务器计算的方案。真是两全其美。

既然要在Jupyter上做文章,第一步就是在服务器上安装jupyter 相信这一步大家都很熟悉了,不熟悉的话,我这里随便推个知友的连接 豆豆:Jupyter Notebook介绍、安装及使用教程。其中比较重点的就是在服务器端需要设置让jupyter监听所有IP。那怎么设置呢?

就是打开jupyter_notebook_config.py

vim .jupyter/jupyter_notebook_config.py

加入如下代码

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.allow_remote_access = True

其中 ip = “*” 指的是监听所有ip 发过来的请求 ,其他几项字面意思。

设置好之后直接在明两行输入jupyter notebook,就出现了这段冗长的东西,我们等下要用到的就是URLs: 这段东西。

1f726e1254166e9061a9248e667ab701.png
图1. 截图 From ubuntu

OK, 设置清楚了服务器端的东西,现在,把目光转移到我们的本地主机上。既然有了URLs, 我们的思路通过VS Code 直接连接到这个服务器的这个窗口(图一所示,端口号8888)。好了现在就需要VS Code 的插件登场了。安装插件jupyter

2d52dde8a5264efe0035b888d091c23c.png
图2. 搜索插件jupyter直接安装

安装好之后,直接按快捷键 command+shift+p , 调出Python: Specify Jupyter server URI。 选择type in the URI for Jupyter server。

c606238513b35a186c6ec241ae7c21e5.png
图3. 调出 URI 输入

然后输入 jupyter的URI:服务器的地址加端口(such as https://127.0.0.1:8888) + "/?token=blabla#$%%&^&*^%%$" 。 完成以上简单步骤,开袋即食。如下看看效果。

7463a0b7a91ed48889df5566bd73d6f9.png
图4. jupyter 在vs code 中的使用
TIPs:如果在URI中直接用服务器的地址,有可能会出现服务器未响应的可能(我就经历了,我也不懂为什么,有懂的小伙伴赶紧告诉我,很急)。 我的解决方案是用ssh 映射服务器端口到本地端口,在终端输入下面代码:
ssh ubuntu@remote_address  -L 127.0.0.1:8888:127.0.0.1:8888
OK ,简而言之,就是把远程的8888端口映射到本地的8888端口。然后我们在输入URI的时候,URI 的输入地址就是本地地址(127.0.0.1:8888)。

2.2 好用的ptvsd

这个python包的出现完全是针对vscode远程调试所开发,它的基本原理就是:预设本地和服务器存在相同的代码文件(在要调试的文件开头需要有专门的识别代码,后文会提到),首先服务器端运行代码,程序运行到这段识别代码后,就会暂停,等待本地IDE的调试指令,当本地调试指令开始,两边就确立了同步关系,在这个时候本地就能接收远程返回的调试参数。从而达到目的。

其实也非常简单,步骤分为三步:

第一步:准备代码,在代码开头植入以下代码:

import ptvsd
ptvsd.enable_attach(address = ('127.0.0.1', 8848))
ptvsd.wait_for_attach()

这几段代码只在远程服务器起作用。它的意思呢,就是远程服务器监听 127.0.0.1:8848 的消息,等待和本地IDE的py交易。

当然这份代码如前面所说,需要拷贝两份分别在本地和服务器。通常我们的方法是通过ssh 把文件传到服务器上去。代码如下:

scp demo.py ubuntu@remote_address:/path

OK 远程端口已经准备好了,之后就是设置VS code 的参数访问远程服务器的8848端口。

第二步:准备本地VScode的启动参数。所有的一切都可以在Vscode 的 lunch,json 里设置,

        {
            "name": "Remote",
            "type": "python",
            "request": "attach",      //这个必须attach
            "host": "remote_address", //云服务器地址
            "port": 8848,             //刚才在代码里设置的端口
            "pathMappings": [
                {
                "localRoot": "${workspaceRoot}",
                "remoteRoot": "/home/vito/Mac"  //云服务器文件的跟目录
                }
            ],
        },

设置调试的方式为“Remote”.

第三步: 调试,确保两边的代码完全相同,然后在远程段启动代码。

a561fa8730e2d2ba66d03d0f0cce0ec5.png
图5. 远程程序进入等待本地调试的响应

4de661dbc385d324dba3f7cbfe47204e.png
图6. 本地和远程两端同步运行代码

当然可能也会存在2.1提到的,无法直接连接到远程服务器。so 可以接着沿用上面的小tips.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值