悉野小楼

导航

ubuntu编译skynet及单步调试

原始地址:

https://github.com/cloudwu/skynet

 

ubuntu编译skynet 需要安装:

sudo apt-get install autoconf automake libtool

(不安装会报 ./autogen.sh: 5: ./autogen.sh: autoreconf: not found)

参考:https://blog.csdn.net/m0_37322399/article/details/108523119

make linux

断点调试方法1:

使用Skynet Debugger插件, 可以远程调试

1)skynet的源码要用修改过的,  重新编译, 地址:

https://github.com/colinsusie/skynet

插件地址(插件可以直接在vscode里面安装):

https://github.com/colinsusie/skynetda

这儿以宿主windows连结虚拟机里面ubuntu, 远程调试为例子:

2) ubuntu安装ssh服务

sudo apt update
sudo apt install openssh-server
安装好后ssh服务会自动启动
可以输入, 检测运行状态
sudo systemctl status ssh

查看端口占用
netstat -ntulp |grep 22

3) vscode安装插件: Remote-SSh, Skynet Debugger (作者是:colin), Lua(Lua插件有多个, 选择Tencent的好些)

4)插件安装完毕之后,用VSCode打开skynet工程,在Run and Debug面板中创建一个launch.json文件,内容如下:

与https://github.com/colinsusie/skynetda 里面介绍的多了个version字段(如果少了这个字段, 看不到运行与调试面板中会看到不skynet debuger).

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "skynet debugger",
            "type": "lua",
            "request": "launch",
            "workdir": "${workspaceFolder}",
            "program": "./skynet",
            "config": "./examples/config_vsc",
            "service": "./service"
        }
    ]
}

5)远程用ssh连linux, 点击左边像显示器的按钮, 再点加号, 创建一个新的远程连结, 输入 ssh username@192.168.174.128, 回车

 也可以点击齿轮, 这样会修改配置文件, 保存

 保存后, 再点左侧图标,鼠标移到192.168.100.200, 这一行, 右边会出现个连结的两按钮, 点->, 会提示连结的系统, 选择linux, 然后按提示, 输入登录密码, 会要求输入两次.

6) 连结成功后, 选择skynet项目目录(建议共享windows的目录, 然后在/mnt/hgfs/mysharefolder找到), 在启动文件的lua打断点, F5就可以断点调试lua了

断点调试方法2:

EmmyLua本地调试skynet:

使用EmmyLua插件, 作者Tangzx, 可以vscode扩展里面下载,  在linux里面安装VSCode, 使用linux的vscode安装此插件.

使用方法参考:EmmyLua 远程调试 Lua 代码

1)复制emmy_core.so文件到skynet的luaclib目录,方便后面加载.

安装完插件后可以使用sudo find / -name "emmy_core.so", 找到emmy_core.so文件,  我本地址为:

/home/myuser/.vscode/extensions/tangzx.emmylua-0.7.1-linux-x64/debugger/emmy/linux/emmy_core.so

2)点击调试按键, 再点 创建launch.json,  会在.vscode目录下面创建一个launch.json的文件.

 在文件里面输入下面, 然后保存

{
    "version": "0.2.0",
    "configurations": [{
        "type": "emmylua_new",
        "request": "launch",
        "name": "EmmyLua New Debug",
        "host": "127.0.0.1",
        "port": 9966,
        "ext": [
            ".lua",
            ".lua.txt",
            ".lua.bytes"
        ],
        "ideConnectDebugger": true
    }]
}

3)lua代码里面加载调试代码

local dbg = require("emmy_core")
if dbg then
    local ret = dbg.tcpListen("localhost", 9966)
    print("dbg.tcpListen", 9966, ret)
    dbg.waitIDE()
    dbg.breakHere()
end

上面这个也可以改到配置里面, 如果配置里面不定义lua_port就不会卡住, 有的话就能调试.

local lua_port = skynet.getenv("lua_port")
if lua_port then
    print('load emmy_core')
    local dbg = require("emmy_core")
    local ret = dbg.tcpListen("localhost", lua_port)
    print("dbg.tcpListen", lua_port, ret)
    dbg.waitIDE()
    dbg.breakHere()
end

db.waitIDE(); dbg.breakHere() 这两行可以不用, 但不能调用skynet.exit(),不然刚连去, skynet服务结束了, 就连结断了. breakHere()可以让连去直接到了从breakHere()这段代码, 不会走下面的代码, 视情况是否要这两行.

4)正确启动skynet程序, 然后按F5, 会发现断点在dbg.breakHere()这一行

EmmyLua远程调试skynet:

windows上的vscode连上远程后, 在vs的扩展中给远程安装EmmyLua插件.下面我是安装好了, 但LuaDebug没给远程安装, 会看到蓝色文字提示. 如果EmmyLua没有在远程安装, 也有提示的, 点击提示文字, 会给远程安装. 安装后, 修改下本地EmmyLua调试时launch.json, 修改host值, 就可以F5调试了

emmylua 远程调试时, json如下:

{
    "version": "0.2.0",
    "configurations": [{
        "type": "emmylua_new",
        "request": "launch",
        "name": "EmmyLua New Debug",
        //"host": "127.0.0.1",
        "host": "192.168.100.37", //远程地址
        "port": 9966, //emmylua插件开放的端口
        "ext": [
            ".lua",
            ".lua.txt",
            ".lua.bytes"
        ],
        "ideConnectDebugger": true
    }]
}

远程用emmylua调试时, 也是一样要在lua代码中加载, 开放端口

local dbg = require("emmy_core")
local ret = dbg.tcpListen("localhost", 9966)
print("dbg.tcpListen", 9966, ret)
dbg.waitIDE()
dbg.breakHere()

 

 测试:

./skynet examples/config	# Launch first skynet node  (Gate server) and a skynet-master (see config for standalone option)
./3rd/lua/lua examples/client.lua 	# Launch a client, and try to input hello.

=========

虚拟机使用的是vmware+ubuntu, 可能已经设置了主机共享文件夹给ubuntu, 但看不到/mnt/hgfs:

解决方法参考:https://blog.csdn.net/weixin_70042862/article/details/134051126

仍然不能看到我们的共享文件夹或者甚至连/hgfs/都没有
没有/hgfs/
使用root权限创建文件夹,在VMware中如果采用简易安装ubuntu,root用户是没有密码的,也就是说root用户不能用,root权限也就无法开启,这就是ubuntu的安全模式。但是ubuntu提供了一种以普通用户执行超级管理权限的命令 —-sudo

sudo passwd root

先输入自己普通用户的密码,在设置root密码,注意要大于8位,切不要包含root

设置好root用户后输入命令

su root

输入root密码,如图所示,则有创建文件夹的权限

进入超级用户模式后创建文件夹

sudo mkdir /mnt/hgfs/

挂载

sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other

若因为 -o nonempty 报错,则将其删去

执行命令,如

sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

共享文件夹重启后消失
需要重新挂载,但每次重启都要执行

sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

整体改变:
编辑etc下的fstab文件,在根目录下执行以下命令

vim /etc/fstab

在文件最后加入

.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other 0 0

 ==============================================

更新慢, 可以切换到阿里去镜像:

参考:https://blog.csdn.net/weixin_49765221/article/details/137371080

备份下后: sudo gedit /etc/apt/sources.list, 在最后粘贴:

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

  

==============================================

如果提示:

Ubuntu:由于没有公钥,无法验证下列签名NO_PUBKEY

参考:

https://blog.csdn.net/Aer_7z/article/details/131752207

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

 

posted on 2023-11-25 20:06  悉野  阅读(113)  评论(0编辑  收藏  举报