前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用VSCode进行服务器Lua代码远程调试

用VSCode进行服务器Lua代码远程调试

作者头像
糖果
发布于 2021-10-18 10:02:27
发布于 2021-10-18 10:02:27
3.8K00
代码可运行
举报
文章被收录于专栏:糖果的实验室糖果的实验室
运行总次数:0
代码可运行

在过去的远程代码调试场景中,需要调试远程服务器上的Lua代码,需要登录服务器,进行代码的编辑。或者将服务器上的代码进行下载,然后编辑后再上传到服务器上。

有了VSCode及SSH远程访问插件,Lua远程Debug插件后,远程调试服务器上的Lua代码变的简单了,只要打开VSC点击要链接访问的服务器,通的VSC的SSH插件访问,省去的了Lua源文件下载、编辑、上传的过程,并且Debug的操作一并可以在VSC编辑器中完成。

使用VSC进行远程调试, 为了不对root用户下的配置数据产生污染和影响,最好办法是独立创建一个用户,在新建的用户创建访问key等配置文件,如果不再需要相关的配置,就可以直接删除掉这个用户。

后续如果做Lua远程开发调试,需要在特定用户的根目录下,安装Luarocks第三方库,或者安装VSC SSH插件、远程调试插件。这些文件都是放到特定用户名的目录下,为了保证各种开发环境的插件和第三方库,不产生不必要的冲突,可以针对特定语言开发环境创建用户,完成种类型的代码调试工作。接下来,就介绍整个远程调试工作的上半部分。

1. 服务器创建用户

创建一个新的Linux用户,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useradd lua -m

加-m参数,会在/home目录下,对应创建一个lua文件夹。之后我们创建的.ssh相关文件,Luarocks本地安装的库的文件,都在这个目录下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
passwd lua

创建完新用户后,要修改一下用户的密码,在之后使用sudo执行root权限时,也要使用这个密码。

2. 给用户赋予ROOT权限

使用visudo命令打开root管理配置文件,找到如下配置,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# User privilege specification
root    ALL=(ALL:ALL) ALL
candylab ALL=(ALL:ALL) ALL
lua     ALL=(ALL:ALL) ALL

在配置文件中加入Lua用户的权限配置。

3. 给当前用户设置公私钥

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -t rsa -b 4096 -C "lua"

命令执行后,会创建的一个公私钥,在/home/lua/.ssh文件夹中。这两个文件展示不需要。需要的是.ssh这个文件夹。

这个命令,我们要在本地Windows客户端上,或者有桌面系统的Linux、Mac OS系统中某个用户下执行,也会同样的生成公私钥,比如我们在windows上执行这个命令,使用的用户是Candylab,会在C:\users\candylab.ssh文件夹中生成id_rsa和id_rsa.pub,这两个文件。

然后,我们需要将公钥文件,id_rsa.pub内容进行复制,在远程服务器上创建的一个叫authorized_keys的文件,将公钥的内容贴入进去。这样VSC才可以通过SSH远程插件访问进入远程服务器。在远程服务器上创建这个文件后,可以在客户端的命令行窗口中,进行测试,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd c:\user\lua\.ssh
ssh -i id_rsa lua@192.168.1.5

如果可以成功登录,说明客户端与服务器之间的SSH正常通信访问是没问题的。如果在用VSC的SSH插件与服务器进行通信,出现know_hosts文件冲突,可将本地的know_hosts文件删除。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


[10:31:25.425] "install" terminal command done
[10:31:25.426] Install terminal quit with output: 过程试图写入的管道不存在。
[10:31:25.426] Received install output: 过程试图写入的管道不存在。
[10:31:25.427] Failed to parse remote port from server output
[10:31:25.427] Resolver error: Error:

有时候虽然最后的报错都是“过程度图写入的管道不存在”,但不一定是由know_hosts冲突引起的。比如,我在家中的VSC与单位工作时的VSC的配置是同步的,不同的是git安装目录位置不一样,在单位同步过来的SSH客户端的SSH执行命令位置,是家里电脑的git安装目录位,就找不到OpenSSH可以执行程序,使用了Windows自带的OpenSSH,也会造成这个提示,无法连接远程服务器。

4. 配置VSC客户端

在用VSC的SSH插件访问之前,我们需要在.ssh目录下配置一个叫config文件,VSC的SSH插件在访问的远程服务器时候,会读取这个文件,如下:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Host 192.168.1.11
 HostName 192.168.1.11
 User lua
 IdentityFile C://users//candylab//.ssh//id_rsa

Host的是主机的别名,HostName是主机有IP,User就访问的用户名,IdentifiFile就是指定私钥文件。

5. 安装VSC服务器端插件

如果想实现Lua远程调试,需要在VSC的插件选项卡里,搜索到指定的插件,进行安装,VSC会通过SSH协议向远程调试的服务器端程序,上传到远程服务器上之后,即可在客户端进行远程Lua程序的调试。

6. 安装Luarocks

Luarocks是安装第三方Lua库的管理工具。可以通过Luarocks快速的安装所需要的各种Lua库,Luarocks的库可以直接按名字进行远程安装,又可以先下载,然后再进行本地化安装。可以装将库只装到当前用户的目录,又可以将库装到公用目录。

大多的Luarocks教程,主要介绍 Luarocks Install 为主,并不过多的区分是远程安装,或是本地安装,此篇中,对此加以详细一些的介绍。

安装可以用系统工具安装,也可以用二进制包安装,也可以用源码安装都可以,没有特殊的情况,推荐使用二进制方式进行安装。

如果是在Windows平台上安装,只要下载二进制的安装就可以了,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/rjpcomputing/luaforwindows/releases
https://github.com/rjpcomputing/luaforwindows

如果Linxu的上安装就比较方便,以下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt install luarocks

apt这种安装方式,会根据不同的操作系统,安装不同版本的Luarocks,并不一定是最新版本。

6.1 Luarocks的库安装

Luarocks安装的第三方库,可以安装在当前用户,也可以安装在系统公用目录, root用户都可以。可以先下载rock文件的再进行安装,也可以用Luarocks的Install命令安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo luarocks install markdown

用管理员安装的rock,是安装在/usr/local

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks install markdown --local

如果加上--local参数,rock是安装在/home/lua/.luarocks,如果用--local时,不要加sudo, 直接安装到当前目录的用户。安装后用 sudo luarocks list 显示的root用户安装过的Rock,是没有安装Markdown库的。Luarocks list显示当前用户安装的rock,才能显示出来安装的Rock有Markdown。

如果你在当前用户,运行lua5.3,require"markdown",Lua会提示找不到这个包。需要export出/home/candylab/.luarocks这个目录位置,设置到环境变量,或者直接在Lua源文件中设置环境变量。

6.2 Luarocks远程安装

Luarocks远程安装比较简便,直接使用Luarocks的Install命令来安装,以Markdown库作为例子进行安装举例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks install markdown

再用Luarocks list就可以列出已经安装过的包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 luarocks list

6.3 Luarocks本地安装

Luarocks可能会在安装的过程中,出现网络状况不好的情况,Rock文件很难从官方网站上下载下来,这种情况,我们可以通过其他路径,非安装的其他机器上下载Rock文件,然后在上传到对应的机器上进行安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget http://luarocks.org/markdown-0.33-1.src.rock
luarocks unpack markdown-0.33-1.src.rock
cd markdown-0.33-1\markdown\
6.3.1 Luarocks 2.02版本下安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks make markdown-0.33-1.rockspec  
--local
--lua-dir d:\gnu\lua\5.1

还可以加上gcc的编译参数,带上debug信息,coredump的时候也好用bt看调用栈信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CC="gcc -g"

安装本地用户目标,非系统目录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks install markdown --local
6.3.2 Luarocks 3.7版本下安装

Luarocks3.7版本中有--local这个参数, Luarocks安装不成.so的纯 Lua库是不需要引用Lua执行文件和.H头文件的位置的,像早期的LFS这种库,就需要指点相应文件目录的位置。并且可以通过下面的命令告诉Luarocks,lua.h的位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks config variables.LUA_INCDIR <dir>
6.3.3 Lua Path

Luarocks 3.7 可以看到Lua的Path信息,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks path
6.3.4 lua-dir 与 LUA_INCDIR

如果Path信息里没有相关的信息,需要在执行Luarocks进行指定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks-admin --lua-dir d:\gnu\lua\5.1 LUA_INCDIR='d:\gnu\lua\5.1\include'

如果是在Ubuntu Linux上安装LFS这种库,就需发lua.h文件,以Lua 5.3为例,需要安装Lua开发包,这样也可以不用在安装时指定.H文件的位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt install liblua5.3-dev

安装Develop开发包,安装时才能找到 .H文件。为了方便查找,也可以装一个mlocate.

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt install mlocate

然后,我们在当前用户的Home目录中安装lFS。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
luarocks install luafilesystem --local

安装过程中,会自动执行如下的动作。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Installing https://luarocks.org/luafilesystem-1.8.0-1.src.rockgcc -O2 -fPIC -I/usr/include/lua5.3 -c src/lfs.c -o src/lfs.o
gcc -shared -o lfs.so -L/usr/local/lib src/lfs.o
luafilesystem 1.8.0-1 is now installed in /home/lua/.luarocks (license: MIT/X11)

Luafilesystem是.so文件和.lua库安装位置是不同的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/home/lua/.luarocks/lib/lua/5.3

6.4 Lua库使用

因为上面采用了--local的方式进行安装的,所以库文件是在当前用户目录的,需设置环境变量,或者在Lua程序代码指明的,下面采用在Lua代码中指明的方式进行调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package.path = package.path..";/home/lua/.luarocks/share/lua/5.3/?.lua";
package.cpath = package.cpath..";/home/lua/.luarocks/lib/lua/5.3/?.so";

require "markdown"
require "lfs"

text1="## test"
md = markdown(text1)

for entry in lfs.dir("../") do
        print(entry)
end

package.path指明的是.Lua库文件的位置。package.cpath指明的是.so库文件的位置。

7. Heng静态网站生成框架

7.1 介绍

Heng是基于OpenResty的一个软件,Web框架功能集合静态网站生成工具,可以将Markdown文件集,生成静态的HTML文件。

Heng采用的是纯脚本的安装方式, 纯Lua代码,可以直接进行解译执行,并不需要makefile进行Lua、或其他库之间的依赖关联。项目代码规模比较小,直接使用shell脚本进行安装管理。

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/未定/heng.git
cd heng
sudo sh install.sh

Heng的操作常用操作用命令方式完成,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Heng v0.1, a Lua web framework based on OpenResty.

Usage: Heng COMMAND [OPTIONS]

Commands:
 new [name]             Create a new application
 start                  Starts the server
 stop                   Stops the server
 restart                Restart the server 
 version                Show version of framework
 build                  Convert Markdown to HTML
 path                   Show framework install path
 help                   Show help tips

Start、Stop、Restart命令是用于开始、关闭、重启OpenResty服务,而Build命令是执行Markdown翻译成HTML的工作。

Heng的常用操作由命令行来完成。使用简洁的命令行操作,进行OpenResty服务的开始、关闭、重启,Markdown文件的构建。Heng支持简单模板支持,用于索引Markdown文件生成的HTML文件目录,并且提供了一个简单的路由展示功能。

7.2 安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/未定/heng.git
cd heng
sudo sh install.sh

7.3 创建项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hi new heng

7.4 创建应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local bjson = require "utils.bjson"
local app = require "heng"

app:get("/heng", function(self)
    return "heng"
end)

app:get("/json", function(self)
    local t = bjson.decode(self.req.body)
    return t   
end)

return app

7.5 启动服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hi start 
hi stop 
hi restart

7.6 测试接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -X GET  http://0.0.0.0:8888/json -d  '{"key":"value"}'

返回结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"key":"value"}

8. 总结

这一篇主要介绍了基于VSC进行远程调试的工作准备,以及相关软件的安装部署,重点并没有在VSC的配置,与代码调试处理上,后面将介绍更多远程调试的细节,和针对操作过程中出现的相关问题的解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 糖果的实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenResty/Nginx Lua服务远程调试方法
很多Nginx Lua程序员入门的过程中会遇到一个问题就是选择编辑器IDE,其实Lua编辑器IDE过去流行的也有几种,但大多数都被人遗忘了,如果只是做纯Lua代码的语法检查,代码补全,很多的IDE都可以做到,VIM安了特定的支持插件也可以。
糖果
2020/11/05
5.6K0
OpenResty/Nginx Lua服务远程调试方法
Go远程调试方案
本文将对远程调试这个日常开发问题,进行一些方法上的梳理,涉及语言包括golang、python。
liliane
2024/08/30
2640
WingIDE 7.2.0 远程调试
大型程序常常会运行在性能强劲的服务器上,但是此时程序的调试又成了难办的事情,于是产生了远程调试的需求,本文介绍WingIDE远程调试配置方法。 环境描述 WingIDE 版本需求 6./ 7. ,我的是 7.2.0 本地操作系统 Win10 远程服务器操作系统 Ubuntu 16.04 安装 putty 解决方案:使用ssh协议通信,实现远程调试 环境配置 安装SSH服务 查看服务是否安装: sudo ps -e |grep ssh 返回带有 sshd 的条目即为
为为为什么
2022/08/05
7990
WingIDE 7.2.0 远程调试
通过Luarocks使Lua开发变得容易【Programming】
Luarlocks 使得开始使用 Lua 变得很容易,Lua 是一个轻量级的、高效的、可嵌入的脚本语言。
Potato
2019/12/01
4.1K0
通过Luarocks使Lua开发变得容易【Programming】
Pycharm远程连接服务器(windows下远程修改服务器代码)[通俗易懂]
http://blog.csdn.net/duankaifei/article/details/41898641
全栈程序员站长
2022/09/27
8.9K0
Pycharm远程连接服务器(windows下远程修改服务器代码)[通俗易懂]
Django REST framework+Vue 打造生鲜超市(十) 十一、pycharm远程代码调试
十一、pycharm远程代码调试  第三方登录和支付,都需要有服务器才行(回调url),我们可以用pycharm去远程调试服务器代码 服务器环境搭建 以全新阿里云centos7系统为例: 11.1.阿
zhang_derek
2018/04/19
1.5K0
Django REST framework+Vue 打造生鲜超市(十)
		十一、pycharm远程代码调试
教你使用PyCharm实现远程调试
最近手头被交接了几个测试脚本,都需要进行二次开发或者持续维护,这几个测试脚本分别被部署在不同的服务器中,使用的Python环境也各不相同,因此如果在本地进行二次开发再部署到服务器中,会很麻烦,所以在本地PyCharm上搭建一个远程调试功能,对脚本进行远程调试和运行,就会特别方便啦。
用户5521279
2019/06/02
1.3K0
如何让vscode远程连接服务器上的docker环境进行debug
一般深度学习算法的训练和调试环境都在服务器端,想不做配置就直接使用vscode进行debug不太可能。而使用远程服务器时,一般用docker进行环境部署的情况比较多。
BBuf
2021/07/23
12.1K0
VS Code通过跳板机连接服务器进行远程代码开发
VScode发布了远程编程与调试的插件Remote Development包含(remote-ssh插件),使用这个插件可以在很多情况下代替vim直接远程修改与调试服务器上的代码,同时具备代码高亮与补全功能,就和在本地使用VScode一样,不用在服务器端翻来覆去的配置vim插件
yuanfan2012
2022/01/25
12.8K2
VS Code通过跳板机连接服务器进行远程代码开发
pycharm本地远程连接服务器,并在本地调试服务器代码
以pycharm professional 2019.1版本为例(使用学校邮箱注册,可以走教育通道) 本地系统:Ubuntu16.04
烤粽子
2021/07/07
7.8K0
pycharm本地远程连接服务器,并在本地调试服务器代码
如何远程调试Python代码
平时使用python写的代码对外部依赖性都不复杂,这些代码在本地调试,运行没问题之后,就可以放到生产去跑了。然而,最近的一个项目,由于使用了一些内部服务,需要连接到内部的环境进行调试。 如果每次都修改代码之后,发布一次到内部环境运行测试,这样子操作流程略显繁琐了。于是乎,我就查阅了一些资料,发现我平时使用的Pycharm可以提供代码远程调试的功能,正好也可以解决我的问题。
py3study
2020/01/03
1.3K0
如何远程调试Python代码
使用 VSCODE 连接远程服务器上的容器
自从 VSCODE 出现以来,我就立马从 pycharm 转入了。厌倦了 pycharm 的笨重,用了 vscode 之后只能说是真香,编辑器界的 flask。但是和 flask 一样,虽然轻便,但是自然基本上一切都需要你自己去配置,各种插件和扩展。有些功能 pycharm 可能自带,但是 VSCODE 就需要自己各种折腾,比如说本文的主题:本地连接远程服务器上的容器。
Alan Lee
2020/03/18
9.5K1
使用 VSCODE 连接远程服务器上的容器
使用VSCode进行远程炼丹
作者:韩冰https://zhuanlan.zhihu.com/p/89662757 本文已由作者授权,未经允许,不得二次转载
AI算法与图像处理
2019/11/29
1.6K0
PHP XDebug 远程调试
然后重点来了,一定不要忘记开放上面配置的xdebug.remote_port端口号,开放此端口号、开放此端口号、开放此端口号。
许杨淼淼
2019/12/30
3.5K0
PHP XDebug 远程调试
利用vscode远程调试Linux内核
上一遍文章介绍了利用QEMU+GDB调试Linux内核。但是,有时候直接利用GDB调试查看代码还不是很方便,所以,在这么重要的场合,怎么能少的了vscode这个神器呢。本篇文章介绍如何使用vscode远程调试内核。
嵌入式与Linux那些事
2022/05/24
4.2K0
利用vscode远程调试Linux内核
VSCode 插件 Remote SSH 连接远程服务器
补充: macOS 自带的命令行终端可以直接使用 ssh 连接远程服务器,windows 则不行
很酷的站长
2022/12/19
2.4K0
VSCode 插件 Remote SSH 连接远程服务器
pycharm设置远程调试_调试助听器需要什么配置的电脑
默认情况下我们在本地开发Python程序时,使用的是本地的Python解释器,如果你安装了virtualenv或者pyenv的话,还可以选择这些虚拟环境。而使用Pycharm的专业版,则还可以选择使用远程Linux机器上的解释器。下面就来介绍下使用远程解释器的步骤。
全栈程序员站长
2022/09/27
4110
pycharm设置远程调试_调试助听器需要什么配置的电脑
在Windows使用VSCode搭建嵌入式Linux开发环境
我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始教驱动入门,免费的,感兴趣者也加上面的群。
韦东山
2022/11/07
3.4K0
在Windows使用VSCode搭建嵌入式Linux开发环境
Linux杂谈:Mac/Linux下配置远程Linux服务器免密登录
你还在为你每次打开测试环境、生产环境需要登录而犯愁吗? 登录是必须的,但密码是可或缺的!!!
恒宇少年
2018/11/07
3K0
golang远程调试 vscode+dlv
作者:matrix 被围观: 7 次 发布时间:2023-12-31 分类:Golang |
HHTjim 部落格
2024/01/01
1.5K0
golang远程调试 vscode+dlv
推荐阅读
相关推荐
OpenResty/Nginx Lua服务远程调试方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文