skynet debug_console控制台中debug指令使用

skynet debug_console控制台中debug指令使用

debug指令源码分析

lua 复制代码
function COMMANDX.debug(cmd)
    local address = adjust_address(cmd[2])  -- 目标服务地址
    local agent = skynet.newservice "debug_agent"  -- 创建调试代理
    local stop
    local term_co = coroutine.running()
    
    -- 命令转发函数
    local function forward_cmd()
        repeat
            skynet.call(agent, "lua", "ping")  -- 检测代理是否存活
            local cmdline = socket.readline(cmd.fd, "\n")
            cmdline = cmdline and cmdline:gsub("(.*)\r$", "%1")
            if not cmdline then
                skynet.send(agent, "lua", "cmd", "cont")
                break
            end
            skynet.send(agent, "lua", "cmd", cmdline)  -- 转发命令到调试代理
        until stop or cmdline == "cont"
    end
    
    -- 启动命令转发协程
    skynet.fork(function()
        pcall(forward_cmd)
        if not stop then
            term_co = nil
        else
            skynet.wakeup(term_co)
        end
    end)
    
    -- 开始调试会话
    local ok, err = skynet.call(agent, "lua", "start", address, cmd.fd)
    stop = true
    if term_co then
        skynet.wait(term_co)  -- 等待转发协程退出
    end

    if not ok then
        error(err)
    end
end

debug指令使用方法

bash 复制代码
debug <服务地址>

获取服务地址

首先需要知道要调试的服务的地址:

bash 复制代码
# 连接到debug console
nc 127.0.0.1 8000

# 查看所有服务列表
list

具体使用示例

示例1:调试普通服务

bash 复制代码
# 连接到debug console
nc 127.0.0.1 8000

# 查看服务列表,找到目标服务地址
list
# 输出示例:
# :0100000b   snlua launcher
# :0100000c   snlua cmaster
# :0100000d   snlua cslave
# :0100000e   snlua datacenterd
# :0100000f   snlua service_mgr

# 调试datacenterd服务
debug :0100000e

示例2:使用服务名调试

bash 复制代码
# 如果服务有注册名字,可以使用名字
debug .launcher

控制流命令

bash 复制代码
// 跳出当前debug
cont

注意事项

安全警告

  • debug命令可以在目标服务中执行任意Lua代码
  • 生产环境慎用,可能影响服务稳定性
  • 调试会话会暂停服务的正常执行

使用限制

  • 目标服务必须支持debug协议
  • 某些服务可能有安全限制,拒绝调试
  • 调试期间服务响应会变慢

在skynet的debug会话中,默认不支持多行输入。每次输入都是一行独立的Lua代码,不过可以使用分开写入多语句:

bash 复制代码
:0000005e>local faci = require "faci.module"; local module = faci.get_module("gm_mgr"); local dispatch = module.dispatch; return dispatch.shutdown_status()
相关推荐
正在走向自律8 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
Fatbobman(东坡肘子)8 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..8 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert8 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
迪康Defender8 小时前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
沫璃染墨9 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
海的透彻9 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat9 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
CCIE-Yasuo10 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
北京中科新远科技10 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php